最近找了份小兼職,干的全是些無聊的工作,比如說給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=123
或ws_main.cell(1,1).value=123
- 刪除2-3行:
ws_main.delete_rows(2,2)
- 改變A1單元格的值:
- 注意:如果有修改,一定要記得保存文件:
wb_main.save('test.xlsx')
判斷表的行數
除此之外,每個表的行數不同,要保證數據不漏掉,需要判斷表的行數,這里僅提供一個思路:
- 粗略估計一個行數上限M(可以偏大,但不能小)
- 假設有數據的行,第一列都有值(根據你的表自行調整)
- 進行二分查找,先判斷M/2處是否有值:
- 若無:判斷M/4處是否有值
- 若有:判斷3M/4處是否有值
這樣一直循環就可以得到行數。
要匯總的話,只需要os.walk
當前文件夾,遍歷打開表格,把里面的內容復制到匯總表中即可。詳細代碼可參見我的代碼倉庫:
https://code.aliyun.com/15821912398/useful_scripts
大家可以繼續挖掘這個包里的其他功能,比如“合並單元格” 等等。