1. 程式人生 > 實用技巧 >【轉】多圖+程式碼 | 詳解Python操作Excel神器openpyxl的各種操作!

【轉】多圖+程式碼 | 詳解Python操作Excel神器openpyxl的各種操作!

轉自:https://blog.csdn.net/weixin_41846769/article/details/108273349

前言

大家好,在之前的十幾篇辦公自動化系列文章中,我們大多是以真實的案例需求來講解Python如何進行自動化辦公操作,並且多次使用到openpyxl來處理表格,今天我們就來詳細的盤點Python操作Excel神器openpyxl的各種操作!

本文將以詳細圖表/程式碼的形式講解如何對Excel進行讀取寫入樣式調整,可以當成速查手冊使用,隨用隨查,建議收藏!

安裝

openpyxl是一個非標準庫,因此需要自行安裝,安裝過程並不困難,Windows/Mac

使用者均可以在命令列(CMD)/終端(Terminal)中使用pip安裝

pipinstallopenpyxl

前置知識

在使用這個模組之前我們需要對Excel表格結構有個比較細緻的瞭解,見下圖:簡而言之,一個Excel工作簿workbook由一個或者多個工作表sheet組成,一個sheet可以看作是多個行row組成,也可以看作是多個列column組成,而每一行每一列都由多個單元格cell組成!

讀取Excel

1.載入Excel

  1. fromopenpyxlimportload_workbook
  2. workbook=load_workbook(filename='測試.xlsx’)
  3. print(workbook.sheetnames)

注意load_workbook只能開啟已經存在的Excel,不能建立新的工作簿

2.根據名稱獲取工作表

  1. fromopenpyxlimportload_workbook
  2. workbook=load_workbook(filename='其他.xlsx')
  3. print(workbook.sheetnames)
  4. sheet=workbook['工作業務']

如果只有一張工作表也可以用:

sheet=workbook.active

3.獲取表格內容所在的範圍

print(sheet.dimensions)

4.獲取某個單元格的具體內容

這邊提供兩種方法,注意都需要以cell.value形式輸出具體值

5.獲取某個單元格的行、列、座標

print(cell.row,cell.column,cell.coordinate)

6.獲取多個格子的值

這裡也有一個細節,Excel中每一列由字母確定,是字元型;每一行由一個數字確定,是整型。當然,上面的三種方法都是獲取一堆表格,現在要輸出每一個表格的值就需要遍歷

  1. forcellincells:
  2. print(cell.value)

三種方法依然有自己的侷限性,如果我需要特定範圍的值,且懶得換算成字母數字座標。例如我想要獲取第2行至第5行、第1列至第3列的全部單元格。因此必須掌握第4種方法:

7.讀取所有的行

  1. forrowinsheet.rows:
  2. print(row)

Excel寫入

1. 儲存Excel

workbook.save(filename='Excel工作表1.xlsx')
  • 如果讀取和寫入Excel的路徑相同則為對原檔案進行修改

  • 如果讀取和寫入Excel的路徑不同則為儲存成新的檔案

2.寫入單元格

  1. cell=sheet['A1']
  2. cell.value='業務需求

3.寫入一行或多行資料

4.將公式寫入單元格並儲存

sheet['K11']='=AVERAGE(K1:K10)'

5.插入一行或多行

6. 插入一列或多列

7.刪除多行

img

8.刪除多列

9. 移動範圍資料

10. 建立新的Excel表格

  1. fromopenpyxlimportWorkbook
  2. 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. 設定行高和列寬

  1. sheet.row_dimensions[1].height=50
  2. sheet.column_dimensions['C'].width=20

6. 單元格合併與取消

  1. #合併
  2. sheet.merge_cells('A1:B2')
  3. sheet.merge_cells(start_row=1,start_column=3,
  4. end_row=2,end_column=4)
  5. #取消合併
  6. sheet.unmerge_cells('A1:B2')
  7. sheet.unmerge_cells(start_row=1,start_column=3,
  8. end_row=2,end_column=4)