【轉】多圖+程式碼 | 詳解Python操作Excel神器openpyxl的各種操作!
轉自:https://blog.csdn.net/weixin_41846769/article/details/108273349
前言
大家好,在之前的十幾篇辦公自動化系列文章中,我們大多是以真實的案例需求來講解Python如何進行自動化辦公操作,並且多次使用到openpyxl
來處理表格,今天我們就來詳細的盤點Python操作Excel神器openpyxl的各種操作!
“本文將以詳細圖表/程式碼的形式講解如何對Excel進行讀取、寫入及樣式調整,可以當成速查手冊使用,隨用隨查,建議收藏!
”
安裝
openpyxl
是一個非標準庫,因此需要自行安裝,安裝過程並不困難,Windows/Mac
pipinstallopenpyxl
前置知識
在使用這個模組之前我們需要對Excel表格結構有個比較細緻的瞭解,見下圖:簡而言之,一個Excel工作簿workbook
由一個或者多個工作表sheet
組成,一個sheet可以看作是多個行row
組成,也可以看作是多個列column
組成,而每一行每一列都由多個單元格cell
組成!
讀取Excel
1.載入Excel
- fromopenpyxlimportload_workbook
- workbook=load_workbook(filename='測試.xlsx’)
- print(workbook.sheetnames)
注意load_workbook
只能開啟已經存在的Excel,不能建立新的工作簿
2.根據名稱獲取工作表
- fromopenpyxlimportload_workbook
- workbook=load_workbook(filename='其他.xlsx')
- print(workbook.sheetnames)
- sheet=workbook['工作業務']
如果只有一張工作表也可以用:
sheet=workbook.active
3.獲取表格內容所在的範圍
print(sheet.dimensions)
4.獲取某個單元格的具體內容
這邊提供兩種方法,注意都需要以cell.value
形式輸出具體值
5.獲取某個單元格的行、列、座標
print(cell.row,cell.column,cell.coordinate)
6.獲取多個格子的值
這裡也有一個細節,Excel中每一列由字母確定,是字元型;每一行由一個數字確定,是整型。當然,上面的三種方法都是獲取一堆表格,現在要輸出每一個表格的值就需要遍歷:
- forcellincells:
- print(cell.value)
三種方法依然有自己的侷限性,如果我需要特定範圍的值,且懶得換算成字母數字座標。例如我想要獲取第2行至第5行、第1列至第3列的全部單元格。因此必須掌握第4種方法:
7.讀取所有的行
- forrowinsheet.rows:
- print(row)
Excel寫入
1. 儲存Excel
workbook.save(filename='Excel工作表1.xlsx')
-
如果讀取和寫入Excel的路徑相同則為對原檔案進行修改,
-
如果讀取和寫入Excel的路徑不同則為儲存成新的檔案
2.寫入單元格
- cell=sheet['A1']
- cell.value='業務需求
3.寫入一行或多行資料
4.將公式寫入單元格並儲存
sheet['K11']='=AVERAGE(K1:K10)'
5.插入一行或多行
6. 插入一列或多列
7.刪除多行
img
8.刪除多列
9. 移動範圍資料
10. 建立新的Excel表格
- fromopenpyxlimportWorkbook
- workbook=Workbook()
Excel樣式調整
1. 設定字型樣式
2. 設定對齊樣式
-
水平對齊:
distributed, justify, center, left, fill, centerContinuous, right, general
-
垂直對齊:
bottom, distributed, justify, center, top
3. 設定邊框樣式
-
邊線樣式:
double, mediumDashDotDot, slantDashDot, dashDotDot, dotted, hair, mediumDashed, dashed, dashDot, thin, mediumDashDot, medium, thick
4. 設定單元格填充樣式
5. 設定行高和列寬
- sheet.row_dimensions[1].height=50
- sheet.column_dimensions['C'].width=20
6. 單元格合併與取消
- #合併
- sheet.merge_cells('A1:B2')
- sheet.merge_cells(start_row=1,start_column=3,
- end_row=2,end_column=4)
- #取消合併
- sheet.unmerge_cells('A1:B2')
- sheet.unmerge_cells(start_row=1,start_column=3,
- end_row=2,end_column=4)