您的位置:首页 > 编程语言 > Python开发

使用Python与openpyxl进行表格处理(一)——读取数据

2015-09-09 00:16 886 查看
虽然现在的工作跟编程已经没有关系,但是曾经学过的东西也可以为我所用,运用到自己的目前工作岗位中,提高工作效率。

这篇要讲到的就是如何利用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!而且文档也更加完善,有很多例子!!!

通过这次这个例子,自己以后也会更加学习如何善于发现,善于思考,如何运用自己以前所学的知识将它运用新的岗位上。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: