1. 程式人生 > >Python通過Openpyxl包匯總表格,效率提升100倍

Python通過Openpyxl包匯總表格,效率提升100倍

合並單元格 let 最終 效率提升 一個個 delet 成本 目標 表名

最近找了份小兼職,幹的全是些無聊的工作,比如說給word調整一下排版啦、把從多方回收來的Excel匯總啦,這些極其催眠又耗時的事,怎麽能接受手動去做呢!!(瘋了嘛,誰知道以後還有多少類似的表格要匯總啊!)

於是乎,聰明如我,花了一個小時擼了個小腳本,完成本次,再也不用打開幾十張表一個個復制粘貼了。

現在進入正題,本次小腳本的開發環境:

  • Python 3.7
  • openpyxl包

怎麽安裝我就不廢話了,pip或者conda都行。

首先要搞清楚Excel表的層級關系,從大到小依次為:

Workbook(工作簿,也就是excel文件) -> Worksheet(工作表,界面下方的標簽) -> Cell(單元格)

操作Excel文件的步驟如下:

  • 首先,導入openpyxl包:from openpyxl import *
  • 然後,打開工作簿:wb_main = load_workbook(‘test.xlsx‘)這是最終要匯總的目標表格,參數即路徑;
  • 接下來,要選中要操作的工作表:ws_main = wb_main.active,我這就一張表,所以就是活動狀態的這張。如果有多張表,可以通過wb_main[表名]來選中。
  • 最後就可以對單元格進行操作啦,比如:
    • 改變A1單元格的值:ws_main[‘A1‘].value=123ws_main.cell(1,1).value=123
    • 刪除2-3行:ws_main.delete_rows(2,2)
  • 註意:如果有修改,一定要記得保存文件:wb_main.save(‘test.xlsx‘)

判斷表的行數

除此之外,每個表的行數不同,要保證數據不漏掉,需要判斷表的行數,這裏僅提供一個思路:

  1. 粗略估計一個行數上限M(可以偏大,但不能小)
  2. 假設有數據的行,第一列都有值(根據你的表自行調整)
  3. 進行二分查找,先判斷M/2處是否有值:
    • 若無:判斷M/4處是否有值
    • 若有:判斷3M/4處是否有值
      這樣一直循環就可以得到行數。

要匯總的話,只需要os.walk當前文件夾,遍歷打開表格,把裏面的內容復制到匯總表中即可。詳細代碼可參見我的代碼倉庫:
https://code.aliyun.com/15821912398/useful_scripts

大家可以繼續挖掘這個包裏的其他功能,比如“合並單元格” 等等。

Python通過Openpyxl包匯總表格,效率提升100倍