文章目录
【README】
本文总结自《python编程快速上手-让繁琐工作自动化》第13章,非常棒的一本书,墙裂推荐;
【13】处理Excel电子表格
【13.1】Excel文档
1)Excel文档:就是一个工作簿,一个工作簿保存到xlsx文件;一个工作簿可以有多个工作表,即sheet;
【13.2】安装openpyxl模块
c++
D:\studynote\00-ai-llm\workbench\PythonBasicStudy\.venv\Scripts>pip install openpyxl
Collecting openpyxl
Downloading openpyxl-3.1.5-py2.py3-none-any.whl.metadata (2.5 kB)
Collecting et-xmlfile (from openpyxl)
Downloading et_xmlfile-2.0.0-py3-none-any.whl.metadata (2.7 kB)
Downloading openpyxl-3.1.5-py2.py3-none-any.whl (250 kB)
Downloading et_xmlfile-2.0.0-py3-none-any.whl (18 kB)
Installing collected packages: et-xmlfile, openpyxl
Successfully installed et-xmlfile-2.0.0 openpyxl-3.1.5
【13.3】读取Excel文档
【13.3.1】使用openpyxl模块打开excel文档
python
import openpyxl
from pathlib import Path
# 使用openpyxl模块读取excel文件
wb = openpyxl.load_workbook(Path.cwd() / '1301-工作簿.xlsx')
print(type(wb))
# <class 'openpyxl.workbook.workbook.Workbook'>
print(wb.sheetnames)
# ['Sheet1', 'Sheet2', 'Sheet3']
sheet1 = wb['Sheet1']
print(sheet1['A1'].value)
# id
【13.3.2】从工作簿取得工作表
1)python使用Worksheet抽象工作表
python
sheet1 = wb['Sheet1']
print(sheet1['A1'].value)
# id
【13.3.3】从工作表sheet获取单元格cell
python
# 打印行列坐标及值
cell = sheet1['A1']
print(f'[%s][%s] = %s' % (cell.row, cell.column, cell.value))
# [1][1] = id
# 通过数字定位行列坐标(从1开始计数)
for i in range(1, 5):
for j in range(1, 4):
cell = sheet1.cell(i, j)
print(f'[%s][%s] = %s' % (cell.row, cell.column, cell.value), end=' ')
print()
# [1][1] = id [1][2] = name [1][3] = addr
# [2][1] = 1 [2][2] = 张三01 [2][3] = 成都01
# [3][1] = 2 [3][2] = 张三02 [3][3] = 成都02
# [4][1] = 3 [4][2] = 张三03 [4][3] = 成都03
【13.3.5】从表中获取行和列
1)可以把Worksheet切片,取得表格中一行,一列或一个矩形区域中的所有单元格;
python
wb = openpyxl.load_workbook(Path.cwd() / '1301-工作簿.xlsx')
sheet1 = wb['Sheet1']
sheetTuple = tuple(sheet1['A1':'A3'])
print(sheetTuple)
# ((<Cell 'Sheet1'.A1>,), (<Cell 'Sheet1'.A2>,), (<Cell 'Sheet1'.A3>,))
# 获取行与列的单元格
print("====== 从表中获取行和列 ======")
for rowOfCellObjects in sheet1:
for cell in rowOfCellObjects:
print(cell.coordinate, cell.value, end=' ')
print()
# ====== 从表中获取行和列 ======
# A1 id B1 name C1 addr
# A2 1 B2 张三01 C2 成都01
# A3 2 B3 张三02 C3 成都02
# A4 3 B4 张三03 C4 成都03
2)获取整列或整行
python
# 获取整行
print("\n======= 获取整行 =======")
rowList = list(sheet1.rows)
# rowList = [(<Cell 'Sheet1'.A1>, <Cell 'Sheet1'.B1>, <Cell 'Sheet1'.C1>)
# , (<Cell 'Sheet1'.A2>, <Cell 'Sheet1'.B2>, <Cell 'Sheet1'.C2>)
# , (<Cell 'Sheet1'.A3>, <Cell 'Sheet1'.B3>, <Cell 'Sheet1'.C3>)
# , (<Cell 'Sheet1'.A4>, <Cell 'Sheet1'.B4>, <Cell 'Sheet1'.C4>)]
print("rowList = " + str(rowList))
for rowObject in rowList:
for cellObject in rowObject:
print(f'%s = %s ' % (cellObject.coordinate, cellObject.value), end=' ')
print()
# A1 = id B1 = name C1 = addr
# A2 = 1 B2 = 张三01 C2 = 成都01
# A3 = 2 B3 = 张三02 C3 = 成都02
# A4 = 3 B4 = 张三03 C4 = 成都03
【13.3.6】工作簿、工作表、单元格复习
1)从工作簿读取单元格涉及的所有函数,方法和数据类型;
- 导入openpyxl模块
- 调用 openpyxl.load_workbook()函数;
- 取得Workbook对象; 抽象工作簿;
- 使用active或sheetnames属性;
- 使用Workbook对象的active属性获取工作簿的活动表;
- 取得Worksheet对象;抽象工作表(一个工作簿包含多个工作表)
- 使用索引或工作表的cell方法,带上row和col坐标;
- 获取Cell对象;访问Cell.value属性;
【13.5】写入Excel文档
【13.5.1】创建并保存Excel文档
python
import openpyxl
from pathlib import Path
wb = openpyxl.Workbook()
# 使用Workbook对象的active属性获取工作簿的活动表
sheet01 = wb.active
print(sheet01.title) # Sheet
sheet01.title = 'PythonWriteSheet01'
print(wb.sheetnames) # ['PythonWriteSheet01']
# 保存到xlsx文档
result = wb.save(Path.cwd() / '1305-01工作簿.xlsx')
【13.5.2】创建和删除工作表
1)调用 create_sheet() 和 del操作符 用于创建和删除工作表 ;
- 注意是工作表,而不是工作簿;一个工作簿可以包含多个工作表;
python
## 创建和删除工作表
wb = openpyxl.Workbook()
# 创建工作表
wb.create_sheet("PythonWriteSheet10")
print(wb.sheetnames)
# ['Sheet', 'PythonWriteSheet02']
# 创建工作表
wb.create_sheet(index=0, title="PythonWriteSheet00")
wb.create_sheet(index=1, title="PythonWriteSheet01")
wb.create_sheet(index=2, title="PythonWriteSheet02")
wb.create_sheet(index=3, title="PythonWriteSheet03")
print(wb.sheetnames)
# ['PythonWriteSheet00', 'PythonWriteSheet01', 'PythonWriteSheet02', 'PythonWriteSheet03', 'Sheet', 'PythonWriteSheet10']
# 删除工作表
del wb['PythonWriteSheet10']
print(wb.sheetnames)
# ['PythonWriteSheet00', 'PythonWriteSheet01', 'PythonWriteSheet02', 'PythonWriteSheet03', 'Sheet']
# 保存excel文件到磁盘
wb.save(Path.cwd() / '1305-02工作簿.xlsx')
wb.close()
【13.5.3】把值写入单元格
python
# 把值写入单元格
wb = openpyxl.Workbook()
# 创建工作表
wb.create_sheet("PythonWriteSheetA01")
sheetA01 = wb["PythonWriteSheetA01"]
sheetA01.cell(1, 1, "值1-1")
sheetA01.cell(1, 2, "值1-2")
sheetA01.cell(2, 1, "值2-1")
sheetA01.cell(2, 2, "值2-2")
wb.save(Path.cwd() / '1305-工作簿A01.xlsx')
wb.close()