1. 程式人生 > >使用Python與openpyxl進行表格處理(一)——讀取資料

使用Python與openpyxl進行表格處理(一)——讀取資料

雖然現在的工作跟程式設計已經沒有關係,但是曾經學過的東西也可以為我所用,運用到自己的目前工作崗位中,提高工作效率。

這篇要講到的就是如何利用Python與openpyxl結合來處理xlsx表格資料。Python處理表格的庫有很多,這裡的openpyxl就是其中之一,但是它是處理excel2007/2010的格式,也就是xlsx系列,如果要處理以前的2003的表格(xls),那麼則要用另外的庫。如果只是要進行表格資料讀取和進行簡單的寫資料的話,推薦使用openpyxl。下篇會介紹到另外一個操作表格文件的庫,叫做xlsxwriter,這是一個專門寫表格的庫,在寫資料和進行表格畫圖方面比較強大(不能讀取和修改表格),因為這次分析資料最後需要進行繪圖展示(openpyxl雖然也能作圖,但是功能有限),所以也會用到這個庫。
更多關於Python操作excel的庫,請參考這個網站

http://www.python-excel.org/(需翻牆)

對於學習openpyxl,參考官方文件基本就夠了,另外也找到一個比較好的學習文章,一個老外寫的,看完操作openpyxl就不難了——教程請猛擊這裡

介紹下自己需要處理的表格情況,這是一個關於酬金的表格,每月都有,它的格式都是固定的,所以完全可以利用Python寫一個指令碼,來實現自己的需求,這樣一來,每月只需敲擊一個命令列,就能生成自己想要的表格,節約不少時間!~因為酬金分為很多大項,大項中又有很多小項,而我要做的就是把大項中的小項進行金額彙總,然後在寫入一個新的表格,表格中是每個大項彙總的資料,以此生成我們需要進行繪圖的資料。

這裡直接貼上原始碼,因為可能涉及敏感資訊,故有XXXX出現以代替原始註釋,圖片還有馬賽克出現:

from openpyxl import Workbook
from openpyxl import load_workbook

wb = load_workbook("C:/Users/Administrator/Desktop/酬金.xlsx")


ws = wb.get_sheet_by_name('酬金明細')



ws_rows_len = len(ws.rows)          #行數
ws_columns_len = len(ws.columns)    #列數

#xxxxxxx
shop_name_column = 5 #xxxxx user_start = 8 user_end = 23 #xxxxx terminal_start = 24 terminal_end = 35 #xxxxx infomation_start = 36 infomation_end = 42 #xxxx group_start = 43 group_end = 45 #xxxx commission_start = 46 commission_end = 60 #xxxx stimulate_start = 61 stimulate_end = 65 #xxxx net_start = 66 net_end = 67 #xxxxxxx agreement_start = 68 agreement_end = 70 #資料有效行從第四行開始 start_row = 4 temp_data = [] for row in range(start_row, ws_rows_len+1): t = 0 temp_data.append(ws.cell(row=row,column=shop_name_column).value) #計算xxxxxx總金額 for column in range(user_start,user_end+1): t += ws.cell(row=row,column=column).value temp_data.append(t) t = 0 #計算xxxx總金額 for column in range(terminal_start,terminal_end+1): t += ws.cell(row=row,column=column).value temp_data.append(t) t = 0 #計算xxxx發展總金額 for column in range(infomation_start,infomation_end+1): t += ws.cell(row=row,column=column).value temp_data.append(t) t = 0 #計算xxxx總金額 for column in range(group_start,group_end+1): t += ws.cell(row=row,column=column).value temp_data.append(t) t = 0 #計算xxxxx總金額 for column in range(commission_start,commission_end+1): t += ws.cell(row=row,column=column).value temp_data.append(t) t = 0 #計算xxxxx總金額 for column in range(stimulate_start,stimulate_end+1): t += ws.cell(row=row,column=column).value temp_data.append(t) t = 0 #計算xxxxx總金額 for column in range(net_start,net_end+1): t += ws.cell(row=row,column=column).value temp_data.append(t) t = 0 #計算xxxxxxxx總金額 for column in range(agreement_start,agreement_end+1): t += ws.cell(row=row,column=column).value temp_data.append(t) #以上程式碼為獲取酬金原始資料進行彙總 #下面將彙總得到的資料插入到一個新的資料表中 reward_ws_hearder = ['xxxx','xxxxx','xxxx','xxxxx','xxxxxx','xxxx','xxxx','xxxx','xxxx'] reward_ws = wb.create_sheet(title='酬金分析') reward_ws.append(reward_ws_hearder) start_list = 0 list_step = 9 end_list = start_list + list_step for i in range(0,ws_rows_len-start_row+1): reward_ws.append(temp_data[start_list:end_list]) start_list += list_step end_list = start_list + list_step wb.save("C:/Users/Administrator/Desktop/酬金1.xlsx") #另存為另一個表,防止意外破壞原始資料。

程式碼寫得有點亂,僅供學習openpyxl參考。通過上述的程式碼,實現了一個新表存放了彙總的資料(原始資料有很多列,現在彙總到一起了)
這裡寫圖片描述
被馬賽克塗抹的左邊A列是名稱,首行則是業務列別。可見資料則是彙總金額。如果我不用指令碼處理的話,每次利用excel進行手動操作,那麼需要對每個大項的小項進行彙總,然後用手動貼上到一個新表中(自己的EXCEL不是很熟,然後對每一行都要進行一個繪圖操作,算下來花的時間很多哦)而現在,只是花了時間寫了一段程式碼,然後以後的以後,只要表格格式不變,我只需要執行py檔案即可!~花的時間就1s吧。

下篇會介紹xlsxwriter這個庫,因為我寫到這裡的時候想用openpyxl來進行繪圖,發現openpyxl實現不了自己的需求,於是找到了這個寫資料和畫圖都很強的xlsxwriter!而且文件也更加完善,有很多例子!!!

通過這次這個例子,自己以後也會更加學習如何善於發現,善於思考,如何運用自己以前所學的知識將它運用新的崗位上。