文章目錄
- 【README】
- 【13】處理Excel電子表格
- 【13.1】Excel文檔
- 【13.2】安裝openpyxl模塊
- 【13.3】讀取Excel文檔
- 【13.3.1】使用openpyxl模塊打開excel文檔
- 【13.3.2】從工作簿取得工作表
- 【13.3.3】從工作表sheet獲取單元格cell
- 【13.3.5】從表中獲取行和列
- 【13.3.6】工作簿、工作表、單元格復習
- 【13.5】寫入Excel文檔
- 【13.5.1】創建并保存Excel文檔
- 【13.5.2】創建和刪除工作表
- 【13.5.3】把值寫入單元格
【README】
本文總結自《python編程快速上手-讓繁瑣工作自動化》第13章,非常棒的一本書,墻裂推薦;
【13】處理Excel電子表格
【13.1】Excel文檔
1)Excel文檔:就是一個工作簿,一個工作簿保存到xlsx文件;一個工作簿可以有多個工作表,即sheet;
【13.2】安裝openpyxl模塊
D:\studynote\00-ai-llm\workbench\PythonBasicStudy\.venv\Scripts>pip install openpyxl
Collecting openpyxlDownloading 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文檔
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抽象工作表
sheet1 = wb['Sheet1']
print(sheet1['A1'].value)
# id
【13.3.3】從工作表sheet獲取單元格cell
# 打印行列坐標及值
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切片,取得表格中一行,一列或一個矩形區域中的所有單元格;
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)獲取整列或整行
# 獲取整行
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文檔
import openpyxl
from pathlib import Pathwb = 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操作符 用于創建和刪除工作表 ;
- 注意是工作表,而不是工作簿;一個工作簿可以包含多個工作表;
## 創建和刪除工作表
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】把值寫入單元格
# 把值寫入單元格
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()