尋覓工具
確定任務之后第一步就是找個趁手的庫來干活。 Python Excel上列出了xlrd、xlwt、xlutils這幾個包,但是
它們都比較老,xlwt甚至不支持07版以后的excel
它們的文檔不太友好,都可能需要去讀源代碼,而老姐的任務比較緊,加上我當時在期末,沒有這個時間細讀源代碼
再一番搜索后我找到了openpyxl,支持07+的excel,一直有人在維護,文檔清晰易讀,參照Tutorial和API文檔很快就能上手,就是它了~
安裝
這個很容易,直接pip install openpyxl,呵呵呵~
因為我不需要處理圖片,就沒有裝pillow。
一些考慮
源文件大約一個在1~2MB左右,比較小,所以可以直接讀入內存處理。
既然是處理excel,何況他們整個組顯然都是win下干活(數據都用excel存了= =,商科的人啊……),這個腳本還是在win下做吧
這個任務完全不需要我對現有的文件做修改!囧……我只要讀入、處理、再寫出另一個文件就行了
學習使用
嗯,就是打開cmd,然后用python的shell各種玩這個模塊來上手……(win下沒有裝ipython,囧)
做這個小腳本基本上我只需要import兩個東西
from openpyxl import Workbookfrom openpyxl import load_workbook
load_workbook顧名思義是把文件導入到內存,Workbook是最基本的一個類,用來在內存里創建文件最后寫進磁盤的。
干活
首先我需要導入這個文件
inwb = load_workbook(filename)
得到的就是一個workbook對象
然后我需要創建一個新的文件
outwb = Workbook()
接著在這個新文件里,用create_sheet新建幾個工作表,比如
careerSheet = outwb.create_sheet(0, 'career')
就會從頭部插入一個叫career的工作表(也就是說用法類似python list的insert)
接下來我需要遍歷輸入文件的每個工作表,并且按照表名做一些工作(e.g.如果表名不是數字,我不需要處理),openpyxl支持用字典一樣的方式通過表名獲取工作表,獲取一個工作簿的表名的方法是get_sheet_names
for sheetName in inwb.get_sheet_names(): if not sheetName.isdigit(): continue sheet = inwb[sheetName]
得到工作表之后,就是按列和行處理了。openpyxl會根據工作表里實際有數據的區域來確定行數和列數,獲取行和列的方法是sheet.rows和sheet.columns,它們都可以像list一樣用。比如,如果我想跳過數據少于2列的表,可以寫
if len(sheet.columns) < 2: continue
如果我想獲取這個工作表的前兩列,可以寫
colA, colB = sheet.columns[:2]
除了用columns和rows來得到這個工作表的行列之外,還可以用excel的單元格編碼來獲取一個區域,比如
新聞熱點
疑難解答