python操作统计excel表格,生成新excel表格
0、前言
因产品的同学试着用python统计Excel表格,但百度的程序又一直有各种问题, 所以叫我帮用python实现一个统计Excel表格程序;我之前也没有写过python操作Excel表格的程序,快速搜索实现了一下,还是发现一些问题,所以分享一下。
1、需求
我们使用TAPD管理项目,这里从TAPD导出的原Excel报表,统计后再生成的新Excel表。
原Excel报表是任务(标题)的信息列表,需要按需求分类分别统计各处理人的预估工时,如下(图1原始Excel表格有200多行、图2统计生成的新Excel表格):
2、python操作excel表格说明
python操作excel表格有不少组件,如:xlwt、openpyxl、pandas、xlrd、xlwings
一些组件在使用时有问题,如下:
https://blog.csdn.net/weixin_42555985/article/details/102872781
https://www.jianshu.com/p/8640abf11297
这里选用xlwings,xlwings使用接近VBA的语法从Python自动与Excel交互,注意是使用到Excel软件;
官方文档及一些参考如下:
https://docs.xlwings.org/en/stable/index.html
https://blog.csdn.net/whalefall/article/details/102665002
http://www.dszhp.com/xlwings-range.html
https://www.cnblogs.com/cyanrose/p/12059040.html
https://blog.csdn.net/lh_hebine/article/details/104559382
当然xlwing使用中也发现一个问题,range().expand()选择表格范围时无法识别一行/一列中的空值,遇到空值默认读取终止:
https://blog.csdn.net/weixin_44781801/article/details/88692982
下面程序会跳过一行/一列的范围选择问题。
3、python xlwings操作excel表格程序
目录下有111.py脚本、原始excel表格222.xls和生成的excel表格333.xls;
直接运行程序: $ python 111.py
即可实现222.xls --统计、生成--> 333.xls,效果如前面的excel表格图片;
下面是python 111.py脚本程序,可在python2.7运行:
# -*- coding: utf-8 -*-
import xlwings as xw
import sysclass Story(object):def __init__(self, handler, workingHours, demandClassification):self.handler = handlerself.workingHours = workingHoursself.demandClassification = demandClassificationdef get_handler(self):return self.handlerdef get_workingHours(self):return self.workingHoursdef get_demandClassification(self):return self.demandClassificationdef __str__(self):return "处理人:" + self.handler + ", 预估工时:" + str(self.workingHours) + ", 需求分类:" + self.demandClassificationfilePath = r'222.xls'
newFilePath = r'333.xls'reload(sys)
sys.setdefaultencoding('utf8')app = None
wb = None
wbNew = None
appNew = None
try:app = xw.App(visible=False, add_book=False)app.display_alerts = Falseapp.screen_updating = Falsewb = app.books.open(filePath)sht = wb.sheets.active# shtName=sht.name# print(shtName)rowCount = sht.range('A1').expand('table').rows.count# print(rowCount)data = sht.range('A3:G' + str(rowCount)).value# print(data)storyList = list()for i in range(len(data)):# print(data[i])# for j in range(len(data[i])):# print(data[i][j])handler = data[i][1]workingHours = data[i][4]demandClassification = data[i][5]if handler is None:handler = "未安排处理人"if workingHours is None:workingHours = 0if demandClassification is None:demandClassification = "未知需求分类"story = Story(str(handler), int(str(workingHours)),str(demandClassification))storyList.append(story)# print(str(story))if len(storyList) > 0:handlerSet = set()demandClassificationSet = set()workingHoursMap = dict()for story in storyList:handlerSet.add(story.get_handler())demandClassificationSet.add(story.get_demandClassification())key = str(story.get_handler() + story.get_demandClassification())if workingHoursMap.get(key) is None:workingHoursMap[key] = 0workingHoursMap[key] = workingHoursMap.get(key) + story.get_workingHours()handlerList = list(handlerSet)demandClassificationList = list(demandClassificationSet)workingHoursList = []handlerGbkList = []demandClassificationGbkList = []change = Falsefor j in range(len(demandClassificationList)):workingHoursList.append([])for k in range(len(handlerList)):key = str(handlerList[k] + demandClassificationList[j])workingHoursList[j].append(workingHoursMap.get(key))if change is False:handlerGbkList.append(handlerList[k].encode("gbk"))change = TruedemandClassificationGbkList.append(demandClassificationList[j].encode("gbk"))try:appNew = xw.App(visible=False, add_book=False)appNew.display_alerts = FalseappNew.screen_updating = FalsewbNew = appNew.books.add()shtNew = wbNew.sheets['sheet1']shtNew.range('A2').options(transpose=True).value = demandClassificationGbkListshtNew.range('B1').value = handlerGbkListshtNew.range('B2').value = workingHoursListwbNew.save(newFilePath)finally:if wbNew is not None:wbNew.close()if appNew is not None:appNew.quit()
finally:if wb is not None:wb.close()if app is not None:app.quit()
python操作统计excel表格,生成新excel表格相关推荐
- Python 操作Word文档插入图片和表格实例演示
Python 操作Word文档插入图片和表格实例演示 效果图 实现过程 ① python-docx 库安装 ② word 文档插入图片演示 ③ word 文档插入表格演示 [ 文章推荐 ] Pytho ...
- php怎么在表格里插图片,Python操作word文档插入图片和表格的实例演示
今天带来Python操作word文档插入图片和表格的实例演示教程详解 前言 图片是Word的一种特殊内容,这篇文章主要介绍了关于Python操作word文档,向里面插入图片和表格的相关内容,下面话不多 ...
- POI操作word模板并生成新的word.docx
XWPFDocument对象 POI是apache提供的可以操作word文档的第三方jar.POI能操作word是使用XWPFDocument对象. XWPFDocument对象可以解析docx文件, ...
- python 原理 pdf_利用Python处理PDF——裁剪和生成新的PDF
安装 在cmd中输入这一句: pip install -U pdfminer3k -i https://pypi.tuna.tsinghua.edu.cn/simple --user 注意:这里安装的 ...
- wps表格生成html,wps表格如何生成多个文件夹
您可能感兴趣的话题: wps表格 生成 多个 文件夹 核心提示:wps表格如何生成多个文件夹 wps表格生成多个文件夹的方法: 首先,建立一个WPS表格.打开WPS表格,在第一行第一列输入" ...
- Java操作Excel 并 保存新Excel
/** * like12 add,20180306,申请表Excel * @param parameter * @return */ public String generateStudentAppl ...
- kettle批量读取清洗excel文件,并分别生成新excel
本参考以下链接,特此感谢 zKettle实战100篇 第19篇 转换核心对象Microsoft Excel输出组件 - 八一菜刀 kettle遍历目录_yzp950311的博客-CSDN博客 [Ket ...
- python 生成数组1:1:20_英特尔“演化算法”新框架:29个Python代码块,自动生成新算法...
点击上方 "码农真经" 关注,星标或者置顶 22点24分准时推送,第一时间送达 来源:公众号 新智元 | 编辑:真经君 码农真经(ID:coder_experience)第 133 ...
- 实用脚本!Python 提取 PDF 指定内容生成新文件!
很多时候,我们并不会预知希望提取的页号,而是希望将包含指定内容的页面提取合并为新PDF,本文就以两个真实需求为例进行讲解. 01 需求描述 数据是一份有286页的上市公司公开年报PDF,大致如下 现在 ...
最新文章
- php5.3.28安装,安装php-5.3.28 时问题
- 【Dual-Path-RNN-Pytorch源码分析】loss函数:SI-SNR
- 有三AILab成立 | 寻找合适的你
- Win7删除休眠文件
- 大数据先行 传统金融转型需从体制上创新
- springboot2 多线程写入数据_解决SpringBoot项目使用多线程处理任务时无法通过@Autowired注入bean问题...
- 常用Jquery前端操作
- javascript:typeof与instanceof区别
- 还原数据库时不能独占访问
- 稳定币usda是哪个发行的_usdt稳定币是谁发行的?
- 开会坐在后面,意思是不感兴趣
- java_web tomcat服务器的安装与配置
- 计算机四级要学多长时间,过计算机四级要多长时间哦?
- 手机里android文件夹是什么文件夹,安卓手机里的.androidlmage test是什么文件夹?...
- 思科计算机网络(1)计算机网络概述
- vue使用组件化思想实现一个简单的购物车页面
- Python — 词汇表(一)
- 透视HTTP协议(一) —— HTTP是什么
- html ajax实现ntlm,jquery – 在一个页面上通过AJAX POST获取NTLM挑战
- 计算机科学导论考试A卷试题,计算机科学导论试题a1.doc