Python通過Openpyxl包匯總表格,效率提升100倍
最近找了份小兼職,干的全是些無聊的工作,比如說給word調(diào)整一下排版啦、把從多方回收來的Excel匯總啦,這些極其催眠又耗時(shí)的事,怎么能接受手動(dòng)去做呢!!(瘋了嘛,誰知道以后還有多少類似的表格要匯總啊!)
于是乎,聰明如我,花了一個(gè)小時(shí)擼了個(gè)小腳本,完成本次,再也不用打開幾十張表一個(gè)個(gè)復(fù)制粘貼了。
現(xiàn)在進(jìn)入正題,本次小腳本的開發(fā)環(huán)境:
- Python 3.7
- openpyxl包
怎么安裝我就不廢話了,pip或者conda都行。
首先要搞清楚Excel表的層級關(guān)系,從大到小依次為:
Workbook(工作簿,也就是excel文件) -> Worksheet(工作表,界面下方的標(biāo)簽) -> Cell(單元格)
操作Excel文件的步驟如下:
- 首先,導(dǎo)入openpyxl包:
from openpyxl import * - 然后,打開工作簿:
wb_main = load_workbook('test.xlsx')這是最終要匯總的目標(biāo)表格,參數(shù)即路徑; - 接下來,要選中要操作的工作表:
ws_main = wb_main.active,我這就一張表,所以就是活動(dòng)狀態(tài)的這張。如果有多張表,可以通過wb_main[表名]來選中。 - 最后就可以對單元格進(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處是否有值:
- 若無:判斷M/4處是否有值
- 若有:判斷3M/4處是否有值
這樣一直循環(huán)就可以得到行數(shù)。
要匯總的話,只需要os.walk當(dāng)前文件夾,遍歷打開表格,把里面的內(nèi)容復(fù)制到匯總表中即可。詳細(xì)代碼可參見我的代碼倉庫:
https://code.aliyun.com/15821912398/useful_scripts
大家可以繼續(xù)挖掘這個(gè)包里的其他功能,比如“合并單元格” 等等。
Listen to your heart.

浙公網(wǎng)安備 33010602011771號