最近找了份小兼職讶踪,干的全是些無(wú)聊的工作购公,比如說(shuō)給word調(diào)整一下排版啦萌京、把從多方回收來(lái)的Excel匯總啦,這些極其催眠又耗時(shí)的事宏浩,怎么能接受手動(dòng)去做呢V小!(瘋了嘛比庄,誰(shuí)知道以后還有多少類似的表格要匯總扒竺谩!)
于是乎佳窑,聰明如我制恍,花了一個(gè)小時(shí)擼了個(gè)小腳本,完成本次神凑,再也不用打開(kāi)幾十張表一個(gè)個(gè)復(fù)制粘貼了净神。
現(xiàn)在進(jìn)入正題,本次小腳本的開(kāi)發(fā)環(huán)境:
- Python 3.7
- openpyxl包
怎么安裝我就不廢話了溉委,pip或者conda都行鹃唯。
首先要搞清楚Excel表的層級(jí)關(guān)系,從大到小依次為:
Workbook(工作簿瓣喊,也就是excel文件) -> Worksheet(工作表坡慌,界面下方的標(biāo)簽) -> Cell(單元格)
操作Excel文件的步驟如下:
- 首先,導(dǎo)入openpyxl包:
from openpyxl import *
- 然后藻三,打開(kāi)工作簿:
wb_main = load_workbook('test.xlsx')
這是最終要匯總的目標(biāo)表格洪橘,參數(shù)即路徑跪者; - 接下來(lái),要選中要操作的工作表:
ws_main = wb_main.active
熄求,我這就一張表渣玲,所以就是活動(dòng)狀態(tài)的這張。如果有多張表抡四,可以通過(guò)wb_main[表名]
來(lái)選中柜蜈。 - 最后就可以對(duì)單元格進(jìn)行操作啦,比如:
- 改變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')
判斷表的行數(shù)
除此之外,每個(gè)表的行數(shù)不同隶垮,要保證數(shù)據(jù)不漏掉藻雪,需要判斷表的行數(shù),這里僅提供一個(gè)思路:
- 粗略估計(jì)一個(gè)行數(shù)上限M(可以偏大狸吞,但不能忻阋)
- 假設(shè)有數(shù)據(jù)的行,第一列都有值(根據(jù)你的表自行調(diào)整)
- 進(jìn)行二分查找蹋偏,先判斷M/2處是否有值:
- 若無(wú):判斷M/4處是否有值
- 若有:判斷3M/4處是否有值
這樣一直循環(huán)就可以得到行數(shù)便斥。
要匯總的話,只需要os.walk
當(dāng)前文件夾威始,遍歷打開(kāi)表格枢纠,把里面的內(nèi)容復(fù)制到匯總表中即可。詳細(xì)代碼可參見(jiàn)我的代碼倉(cāng)庫(kù):
https://code.aliyun.com/15821912398/useful_scripts
大家可以繼續(xù)挖掘這個(gè)包里的其他功能黎棠,比如“合并單元格” 等等晋渺。