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

最近找了份小兼職,干的全是些無聊的工作,比如說給word調(diào)整一下排版啦、把從多方回收來的Excel匯總啦,這些極其催眠又耗時(shí)的事,怎么能接受手動(dòng)去做呢!?。ǒ偭寺?,誰知道以后還有多少類似的表格要匯總啊?。?/p>

于是乎,聰明如我,花了一個(gè)小時(shí)擼了個(gè)小腳本,完成本次,再也不用打開幾十張表一個(gè)個(gè)復(fù)制粘貼了。

現(xiàn)在進(jìn)入正題,本次小腳本的開發(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 *
  • 然后,打開工作簿:wb_main = load_workbook('test.xlsx')這是最終要匯總的目標(biāo)表格,參數(shù)即路徑;
  • 接下來,要選中要操作的工作表:ws_main = wb_main.active,我這就一張表,所以就是活動(dòng)狀態(tài)的這張。如果有多張表,可以通過wb_main[表名]來選中。
  • 最后就可以對(duì)單元格進(jìn)行操作啦,比如:
    • 改變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')

判斷表的行數(shù)

除此之外,每個(gè)表的行數(shù)不同,要保證數(shù)據(jù)不漏掉,需要判斷表的行數(shù),這里僅提供一個(gè)思路:

  1. 粗略估計(jì)一個(gè)行數(shù)上限M(可以偏大,但不能?。?/li>
  2. 假設(shè)有數(shù)據(jù)的行,第一列都有值(根據(jù)你的表自行調(diào)整)
  3. 進(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è)包里的其他功能,比如“合并單元格” 等等。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容