书籍《Python编程快速上手(第2版)》阅读心得7、处理Excel表格
[复制链接]
本帖最后由 xinmeng_wit 于 2024-5-30 20:51 编辑
本次来学习利用python处理excel文件相关的知识。
excel是我们日常工作中用的最多的文件了,使用python来处理excel将会极大地提高工作效率,本次的内容非常的重要。
Python中处理excel文件需要安装第三方库openpyxl,应该还有其它的处理excel的库,但是本次学习使用的是openpyxl库。
因为是第三方库,所有使用之前需要进行一个安装,安装方式就不再叙述了,与其它库的安装方法一样。
首先来学习一下Excel文件的写入操作,该操作包括Excel文件的创建和保存,sheet的创建和删除,sheet的重命名。
例子如下:
import openpyxl
wb = openpyxl.Workbook() # 创建一个新的Excel工作簿
print(wb.sheetnames) # 打印sheet名
sheet = wb.active # 激活sheet
print(sheet.title) # 打印sheet名
sheet.title = 'Sheet_name' # 修改sheet名
print(wb.sheetnames) # 打印sheet名
wb.create_sheet() # 创建一个新的sheet
print(wb.sheetnames) # 打印sheet名
wb.create_sheet(index=0, title='First sheet') # 在最前面创建一个新的sheet
print(wb.sheetnames) # 打印sheet名
wb.create_sheet(index=2, title='Middle sheet') # 在index为2的地方创建一个新的sheet
print(wb.sheetnames) # 打印sheet名
del wb['Sheet_name'] # 删除名字为Sheet_name的sheet
print(wb.sheetnames) # 打印sheet名
sheet = wb['First sheet'] # 选取sheet
sheet['A1'] = 'Hello World!'# 向A1单元格中写入内容
print(sheet['A1'].value) # 打印单元格的内容
#保存Excel工作簿
wb.save('D:Python\\Excel create and write test.xlsx')
运行结果:
打开生成的Excel create and write test.xlsx文件,查看里面的sheet和单元格内容:
接下来,再来看看Excel的读取操作。
访问单元格可以通过sheet加上下标的方式,还可以通过cell方法来进行访问。
另外,还可以获取多个连续单元格的对象,还可以获取同一行的所有单元格。
还有比较高级的设置字体大小,使用公式和设置行高和列宽等。
如下例子,展示了如何使用这些方法。
import openpyxl
from openpyxl.styles import Font
wb = openpyxl.load_workbook('D:Python\\Excel read test.xlsx') # 打开一个已经存在的excel表格
print(wb.sheetnames) # 打印sheet名
sheet = wb['Sheet'] # 选取sheet
print(sheet['A2'].value) # 打印单元格的内容
cell = sheet['A2']
# 获取单元格的行,列和值
print('Row: %s, Column: %s is %s' % (cell.row, cell.column, cell.value))
# 获取单元格的位置信息和值
print('Cell %s is %s' % (cell.coordinate, cell.value))
# 可以通过cell()方法来获取单元格的内容
print('Cell %s is %s' % (cell.coordinate, sheet.cell(row=2, column=1).value))
# 获取sheet的行数和列数
print('Row number is %s, Column number is %s' % (sheet.max_row, sheet.max_column))
# 获取A2到C35这个矩形区域的所有单元格,并转换为元组
content = tuple(sheet['A2':'C35'])
#打印A2~C35所有单元格的内容
for row in sheet['A2':'C35']:
for cell in row:
print(cell.coordinate, cell.value)
print('---END OF ROW---')
# 创建一个字体
italic24Font = Font(size=24, italic=True)
# 应用字体到A2单元格
sheet['A2'].font = italic24Font
#使用公式SUM来进行单元格自动求和
sheet['D3'] = '=SUM(C2:C3)'
# 设置行高和列宽
sheet.row_dimensions[5].height = 70
sheet.column_dimensions['C'].width = 20
wb.save('D:Python\\Excel read test.xlsx')
运行结果:
['Sheet']
房地产开发投资(亿元)
Row: 2, Column: 1 is 房地产开发投资(亿元)
Cell A2 is 房地产开发投资(亿元)
Cell A2 is 房地产开发投资(亿元)
Row number is 35, Column number is 3
A2 房地产开发投资(亿元)
B2 22082
C2 -9.5
---END OF ROW---
A3 其中:住宅
B3 16585
C3 -10.5
---END OF ROW---
A4 办公楼
B4 990
C4 -0.4
---END OF ROW---
A5 商业营业用房
B5 1597
C5 -10.5
---END OF ROW---
A6 房屋施工面积(万平方米)
B6 678501
C6 -11.1
---END OF ROW---
A7 其中:住宅
B7 474580
C7 -11.7
---END OF ROW---
A8 办公楼
B8 28114
C8 -8.6
---END OF ROW---
A9 商业营业用房
B9 59247
C9 -11.8
---END OF ROW---
A10 房屋新开工面积(万平方米)
B10 17283
C10 -27.8
---END OF ROW---
A11 其中:住宅
B11 12534
C11 -28.7
---END OF ROW---
A12 办公楼
B12 546
C12 -10.9
---END OF ROW---
A13 商业营业用房
B13 1043
C13 -32.8
---END OF ROW---
A14 房屋竣工面积(万平方米)
B14 15259
C14 -20.7
---END OF ROW---
A15 其中:住宅
B15 11148
C15 -21.9
---END OF ROW---
A16 办公楼
B16 448
C16 -6.8
---END OF ROW---
A17 商业营业用房
B17 1103
C17 -23.6
---END OF ROW---
A18 新建商品房销售面积(万平方米)
B18 22668
C18 -19.4
---END OF ROW---
A19 其中:住宅
B19 18942
C19 -23.4
---END OF ROW---
A20 办公楼
B20 581
C20 11.9
---END OF ROW---
A21 商业营业用房
B21 1378
C21 4.8
---END OF ROW---
A22 新建商品房销售额(亿元)
B22 21355
C22 -27.6
---END OF ROW---
A23 其中:住宅
B23 18523
C23 -30.7
---END OF ROW---
A24 办公楼
B24 759
C24 6.3
---END OF ROW---
A25 商业营业用房
B25 1386
C25 1.5
---END OF ROW---
A26 商品房待售面积(万平方米)
B26 74833
C26 15.6
---END OF ROW---
A27 其中:住宅
B27 39458
C27 23.9
---END OF ROW---
A28 办公楼
B28 5204
C28 11.1
---END OF ROW---
A29 商业营业用房
B29 14246
C29 1.5
---END OF ROW---
A30 房地产开发企业本年到位资金(亿元)
B30 25689
C30 -26
---END OF ROW---
A31 其中:国内贷款
B31 4554
C31 -9.1
---END OF ROW---
A32 利用外资
B32 7
C32 -11.9
---END OF ROW---
A33 自筹资金
B33 8681
C33 -14.6
---END OF ROW---
A34 定金及预收款
B34 7435
C34 -37.5
---END OF ROW---
A35 个人按揭贷款
B35 3643
C35 None
---END OF ROW---
最后再来看以下如何利用Python在excel中画图表。
画图表也比较简单,格式相对比较固定。
先用openpyxl.chart.Reference选定数据,再用openpyxl.chart.Series定义一个series对象,再定义chart对象
指定chart标题,append插入chart,最后设置chart的起始位置就可以了。
import openpyxl
import openpyxl.chart
import openpyxl.chart.series
# 创建一个工作簿
wb = openpyxl.Workbook()
sheet = wb.active
# 向表中填入一些数据
for i in range(1,11):
sheet['A' + str(i)] = i
# 选定要画图的原始数据
refObj = openpyxl.chart.Reference(sheet, min_col=1, min_row=1, max_col=1, max_row=10)
# 定义series对象
seriesObj = openpyxl.chart.Series(refObj, title='First series')
# 定义chart对象
charObj = openpyxl.chart.BarChart()
# 设置chart的标题
charObj.title = 'My chart'
# 插入chart
charObj.append(seriesObj)
# 设置chart的起始位置
sheet.add_chart(charObj, 'C5')
# 保存
wb.save('D:Python\\Excel chart test.xlsx')
运行完成后,打开execl看看画好的chart,如下:
画出的chart还是比较漂亮的,同时,也可以选择其它类型的chart,比如折线图,散点图和饼状图等等。
|