使用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出现以代替原始注释,图片还有马赛克出现:
代码写得有点乱,仅供学习openpyxl参考。通过上述的代码,实现了一个新表存放了汇总的数据(原始数据有很多列,现在汇总到一起了)
被马赛克涂抹的左边A列是名称,首行则是业务列别。可见数据则是汇总金额。如果我不用脚本处理的话,每次利用excel进行手动操作,那么需要对每个大项的小项进行汇总,然后用手动粘贴到一个新表中(自己的EXCEL不是很熟,然后对每一行都要进行一个绘图操作,算下来花的时间很多哦)而现在,只是花了时间写了一段代码,然后以后的以后,只要表格格式不变,我只需要运行py文件即可!~花的时间就1s吧。
下篇会介绍xlsxwriter这个库,因为我写到这里的时候想用openpyxl来进行绘图,发现openpyxl实现不了自己的需求,于是找到了这个写数据和画图都很强的xlsxwriter!而且文档也更加完善,有很多例子!!!
通过这次这个例子,自己以后也会更加学习如何善于发现,善于思考,如何运用自己以前所学的知识将它运用新的岗位上。
这篇要讲到的就是如何利用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!而且文档也更加完善,有很多例子!!!
通过这次这个例子,自己以后也会更加学习如何善于发现,善于思考,如何运用自己以前所学的知识将它运用新的岗位上。
相关文章推荐
- python-selenium多浏览器支持测试框架
- 用python求回数
- python-多继承
- 在Python中建立N维数组并赋初值
- Python中is和==的区别
- Python all和any函数对空列表的返回值
- 零基础学python-13.1 迭代器简介与文件迭代器
- 零基础学python-13.1 迭代器简介与文件迭代器
- Python 正则表达式里的单行s和多行m模式
- Python time模块函数与时间格式关系图解
- Python 删除列表中的一种元素
- Python 多重列表解析里for的顺序
- Eclipse+pydev插件-----python开发环境
- python—解决“Unable to find vcvarsall.bat”错误
- Python getattr()方法
- Python urllib
- python 计算文件函数
- Python中通过多个字符分割(split)字符串的方法
- Python图表绘制:matplotlib绘图库入门
- 使用python-ftp协议上传数据到远程服务器