Python excel xlwings+QT 考勤表开发 -【Python Office开发基础培训】 拆分合并文件
Python excel xlwings+QT 考勤表开发
- 1. 概述
- 2. QT界面搭建
- 2.1搭建界面
- 3. 搭建软件架构
- 3. 读取输入文件
- 3.1链接文件
- 3.2读取表格
- 3.3解析为树状结构
- 4.输出文件
- 4.1 拆分文件
- 5.合并文件
- 5.1 合并文件
- 参考文章
1. 概述
这是一篇excel开发培训的示例教程。用考勤表作为示例进行演示:
如何创建QT界面, 如何衔接打开的Excell
如何读取数据
如何数据解析为一个树状结构
如何拆分成不同的excel文件。
如何合并不同的文件到一个汇总文件内
本文的代码仓地址: https://gitee.com/bigearrabbit/kevinpython/blob/master/KevinAttendance/
2. QT界面搭建
2.1搭建界面
用desiner所见即所得搭建界面,设置好自动缩放,设定好信号槽。
运行mainwindows.bat 生成mainwindows_ui.py文件:
或命令:pyuic5 -o mainwindows_ui.py mainwindows.ui
创建KevinAttendanceDlg.py。
运行效果:
3. 搭建软件架构
为了清晰结构,实现数据、算法、界面分开,采用下面的文件结构。
文件 | 用途 |
---|---|
mainwindows.ui | 自动创建的ui文件 |
mainwindows_ui.py | 自动创建的界面py文件 |
KevinAttendanceDlg.py | 自定义的界面文件,继承于mainwindows_ui.py |
KevinAttendanceParam.py | 自定义的参数类 |
KevinAttendanceCore.py | 核心算法类 |
3. 读取输入文件
请在下面文件内查看代码:
https://gitee.com/bigearrabbit/kevinpython/blob/master/kevinexcel/KevinAttendance/KevinAttendanceCore.py
3.1链接文件
请在KevinAttendanceCore.py文件内查看代码。
def LinkActiveSheet(self):self.ErrMsg = ''if xw.apps.active == None:self.ErrMsg = "xw.apps.active == None"return 1param = self.param # 设定引用# get pidpid = xw.apps.active.pidparam.pid = pidparam.app = xw.apps[pid]# 其中需要注意的是单元格的完全引用路径是:# 第一个Excel程序的第一个工作薄的第一张sheet的第一个单元格wb = param.wb = param.app.books.activeif wb == None:self.ErrMsg = ("wb == None")return 1param.ExcelFileName = wb.name# 引用工作簿中的sheet# sht=xw.books['工作簿的名字‘].sheets['sheet的名字']# or sht=wb.sheets[sheet的名字]param.sht = wb.sheets[0] # get sheetreturn 0
3.2读取表格
请在KevinAttendanceCore.py文件内查看代码。
def GetAttendTable(self):param = self.paramwb = param.wbsht = wb.sheets[0] # get sheet 0param.inputTable = sht.used_range.valueif param.inputTable == None or len(param.inputTable) < 2:self.ErrMsg = "Input Table data is not right. rows < 2"return 2return 0 # ok
3.3解析为树状结构
函数AnylisisAttend()
请在KevinAttendanceCore.py文件内查看代码。
解析的效果
ColumnNames :
['部门', '科室', '姓名', '工号', '级别', '正常出勤', '加班', '年假', '事假', '合计']
Dept Tree
开发部
┠ 软件科
┠ ┠ ['张1', 1001.0, 'E', 174.0, 8.0, 8.0, 0.0, 174.0]
┠ ┠ ['张2', 1002.0, 'F', 174.0, 0.0, 0.0, 0.0, 174.0]
┠ ┗ ['张3', 1003.0, 'G', 174.0, 0.0, 0.0, 8.0, 166.0]
┠ 硬件科
┠ ┠ ['张4', 1005.0, 'E', 174.0, 24.0, 0.0, 0.0, 198.0]
┠ ┠ ['张5', 1006.0, 'F', 174.0, 30.0, 8.0, 0.0, 196.0]
┠ ┠ ['张6', 1007.0, 'G', 174.0, 8.0, 0.0, 16.0, 166.0]
┠ ┗ ['张7', 1008.0, 'H', 174.0, 0.0, 0.0, 0.0, 174.0]
┠销售部
┠ 东北科
┠ ┠ ['张7', 1009.0, 'E', 174.0, 0.0, 0.0, 0.0, 174.0]
┠ ┠ ['张8', 1010.0, 'F', 174.0, 22.0, 0.0, 0.0, 196.0]
┠ ┗ ['张9', 1011.0, 'G', 174.0, 0.0, 16.0, 0.0, 158.0]
┗ 西南科┠─['李1', 1012.0, 'E', 174.0, 34.0, 0.0, 4.0, 204.0]┗─['李2', 1013.0, 'F', 174.0, 0.0, 0.0, 0.0, 174.0]
4.输出文件
拆分成不同的文件,然后分给不同的科室统计员进行填写、校核等工作
4.1 拆分文件
KevinAttendanceCore.SaveToFiles()函数
循环遍历部门的树,每个部门的科室保存到一个文件内
def SaveToFiles(self, iDeptTree):ec = 0app = self.param.appdatestr = "20210401"for key, value in iDeptTree.items():for key2, value2 in value.items():filename = "{0}-{1}-{2}.xlsx".format(key, key2, datestr)# filename = key + "-" + key2 + "-20210401" + ".xlsx"print(filename)wb = app.books.add() # wb就是新建的工作簿(workbook)sht = wb.sheets['sheet1']sht.range('A1').value = self.param.ColumnNamesi = 2for key3, value3 in value2.items():print(" ", value3)sht.range(i,1).value = keysht.range(i,2).value = key2sht.range(i,3).value = value3i+=1outfile = 'out/' + filenamewb.save(outfile)wb.close()#return 0
输出信息,文件:
开发部-软件科-20210401.xlsx
开发部-硬件科-20210401.xlsx
销售部-东北科-20210401.xlsx
销售部-西南科-20210401.xlsx
5.合并文件
拆分成不同的文件,然后分给不同的科室统计员进行填写、校核等工作
(等待开发)
5.1 合并文件
参考文章
- 杨海华, CSDN, Python excel( xlrd,xlwt, xlwings)表格开发 -【Python Office开发基础培训】
Python excel xlwings+QT 考勤表开发 -【Python Office开发基础培训】 拆分合并文件相关推荐
- Python 处理一对多考勤表
问题描述:单位一周考勤系统导出的表结构如图 从导出的表格可以看出是个一对多的表,并且有的老师对应7条记录,有的可能只有6条. 最后要得到每一个老师一周出勤的统计,如图: 实际上是一个考勤时间的转置表, ...
- python excel 复制行_如何使用Python将一行Excel工作表复制到另一个工作表
请参阅python excel库xlrd(用于excel阅读)/ xlwt(用于excel写入) http://www.python-excel.org/ 例如(阅读)(from this): imp ...
- python自动翻译excel某一列_【python excel实例教程】怎样用Python将excel的某一列生成一个列表?...
用python做一个登录程序通过后直接进入某个excel? 是要做python自动化办公吧,这个很不错的,让办公很方便快捷的 python excel进行接口自动化测试,目前只写成了利用多个sheet ...
- 使用python开发的图形界面的pdf拆分合并工具
前一段有一个几千页的pdf文件,想分割成几个小的文件,本来用python写过一个pdf文件拆分的工具,因为笔记本坏掉,代码丢掉了.又不想重写,就上网去搜pdf的拆分工具,结果发现很多pdf拆分工具,有 ...
- Excel 制作自动记录考勤表
单位传统的考勤登记方式有工作量大.出错几率高.统计分析麻烦等特点,现在已经进入了信息时代,为何不用电脑来帮我们进行考勤呢?用Excel 2002制作简单.快捷.准确的考勤表,你就能切身体会到信息时代的 ...
- python excel xlwings 详解
官方文档: https://docs.xlwings.org/en/stable/quickstart.html # 导入库 import xlwings as xw# 设为程序可见, 不新建工作薄 ...
- python excel增加一列_(用Python修改excel中一列数据)python新增一列
python怎么从excel中读取数据? ⒈ #import παέτο import xlrd #Ρύθμι διαδρής path='C:\\Users\\jyjh\\Desktop\\data ...
- python用xlwings从一个表格复制到另一个表格里,xls文件的某一解决方式。
直接去最底部复制代码,每一行都有备注,能够看懂,中间是我在做的过程中踩到的坑. 我用python已经修改好了上传饿了么的表格,但是美团是xls格式,openpyxl好像是不能修改的 那么只有换个其他的 ...
- python excel导入oracle数据库_【Python代替Excel】12:Python操作oracle数据库
日常工作中,如果有数据库权限,那么在oracle中提取数据.在Python中处理是比较方便的.Python也提供了一个库专门操纵数据库.今天就专门来讲讲如何在Python中操作数据库. 准备工作 需要 ...
最新文章
- npm install遇到ENOENT: no such file or directory, rename错误
- c语言基础变量,C语言基础-第一篇-变量
- 渗透知识-SQL注入
- HBase性能优化方法总结(2):表的设计
- Mysql索引,用户及授权(root密码恢复)
- 投稿Cover Letter如何写出彩
- vc++调用jni_通过JNI使用C ++尖叫快速进行Lucene搜索
- 国外著名java技术资料网站
- python3 三级菜单-基础版
- Visual studio 的教程
- mysql 5.5 udf_MYSQL5漏洞之udf提权
- Python版快速排序算法
- 如果你对web前端学习感到迷茫的话请看完本文
- 借助FLASH技术美化VBA操作界面
- 检查计算机网络是否连通可运行什么命令,用ping命令如何检测目标主机是否能连通...
- 梧州计算机学考查询,学考成绩查询
- 如何鉴别项目经理/软件设计师的水平
- qlearning算法_通过OpenAI Gym编写第一个强化学习算法
- HISI3536安装交叉编译工具链
- iOS12 捷径(热门推荐)