本文总结自《python编程快速上手-让繁琐工作自动化》第13章,非常棒的一本书,墙裂推荐;
1)Excel文档:就是一个工作簿,一个工作簿保存到xlsx文件;一个工作簿可以有多个工作表,即sheet;
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
import openpyxl
from pathlib import Path
# 使用openpyxl模块读取excel文件
wb = openpyxl.load_workbook(Path.cwd() / '1301-工作簿.xlsx')
print(type(wb))
#
print(wb.sheetnames)
# ['Sheet1', 'Sheet2', 'Sheet3']
sheet1 = wb['Sheet1']
print(sheet1['A1'].value)
# id
1)python使用Worksheet抽象工作表
sheet1 = wb['Sheet1']
print(sheet1['A1'].value)
# id
# 打印行列坐标及值
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
1)可以把Worksheet切片,取得表格中一行,一列或一个矩形区域中的所有单元格;
wb = openpyxl.load_workbook(Path.cwd() / '1301-工作簿.xlsx')
sheet1 = wb['Sheet1']
sheetTuple = tuple(sheet1['A1':'A3'])
print(sheetTuple)
# ((,), (,), (,)) | | |
# 获取行与列的单元格
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)获取整列或整行
# 获取整行
print("\n======= 获取整行 =======")
rowList = list(sheet1.rows)
# rowList = [(, , ) | | |
# , (, , ) | | |
# , (, , ) | | |
# , (, , )] | | |
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
1)从工作簿读取单元格涉及的所有函数,方法和数据类型;
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')
1)调用 create_sheet() 和 del操作符 用于创建和删除工作表 ;
## 创建和删除工作表
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()
# 把值写入单元格
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()