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 合并文件

参考文章

  1. 杨海华, CSDN, Python excel( xlrd,xlwt, xlwings)表格开发 -【Python Office开发基础培训】

Python excel xlwings+QT 考勤表开发 -【Python Office开发基础培训】 拆分合并文件相关推荐

  1. Python 处理一对多考勤表

    问题描述:单位一周考勤系统导出的表结构如图 从导出的表格可以看出是个一对多的表,并且有的老师对应7条记录,有的可能只有6条. 最后要得到每一个老师一周出勤的统计,如图: 实际上是一个考勤时间的转置表, ...

  2. python excel 复制行_如何使用Python将一行Excel工作表复制到另一个工作表

    请参阅python excel库xlrd(用于excel阅读)/ xlwt(用于excel写入) http://www.python-excel.org/ 例如(阅读)(from this): imp ...

  3. python自动翻译excel某一列_【python excel实例教程】怎样用Python将excel的某一列生成一个列表?...

    用python做一个登录程序通过后直接进入某个excel? 是要做python自动化办公吧,这个很不错的,让办公很方便快捷的 python excel进行接口自动化测试,目前只写成了利用多个sheet ...

  4. 使用python开发的图形界面的pdf拆分合并工具

    前一段有一个几千页的pdf文件,想分割成几个小的文件,本来用python写过一个pdf文件拆分的工具,因为笔记本坏掉,代码丢掉了.又不想重写,就上网去搜pdf的拆分工具,结果发现很多pdf拆分工具,有 ...

  5. Excel 制作自动记录考勤表

    单位传统的考勤登记方式有工作量大.出错几率高.统计分析麻烦等特点,现在已经进入了信息时代,为何不用电脑来帮我们进行考勤呢?用Excel 2002制作简单.快捷.准确的考勤表,你就能切身体会到信息时代的 ...

  6. python excel xlwings 详解

    官方文档: https://docs.xlwings.org/en/stable/quickstart.html # 导入库 import xlwings as xw# 设为程序可见, 不新建工作薄 ...

  7. python excel增加一列_(用Python修改excel中一列数据)python新增一列

    python怎么从excel中读取数据? ⒈ #import παέτο import xlrd #Ρύθμι διαδρής path='C:\\Users\\jyjh\\Desktop\\data ...

  8. python用xlwings从一个表格复制到另一个表格里,xls文件的某一解决方式。

    直接去最底部复制代码,每一行都有备注,能够看懂,中间是我在做的过程中踩到的坑. 我用python已经修改好了上传饿了么的表格,但是美团是xls格式,openpyxl好像是不能修改的 那么只有换个其他的 ...

  9. python excel导入oracle数据库_【Python代替Excel】12:Python操作oracle数据库

    日常工作中,如果有数据库权限,那么在oracle中提取数据.在Python中处理是比较方便的.Python也提供了一个库专门操纵数据库.今天就专门来讲讲如何在Python中操作数据库. 准备工作 需要 ...

最新文章

  1. npm install遇到ENOENT: no such file or directory, rename错误
  2. c语言基础变量,C语言基础-第一篇-变量
  3. 渗透知识-SQL注入
  4. HBase性能优化方法总结(2):表的设计
  5. Mysql索引,用户及授权(root密码恢复)
  6. 投稿Cover Letter如何写出彩
  7. vc++调用jni_通过JNI使用C ++尖叫快速进行Lucene搜索
  8. 国外著名java技术资料网站
  9. python3 三级菜单-基础版
  10. Visual studio 的教程
  11. mysql 5.5 udf_MYSQL5漏洞之udf提权
  12. Python版快速排序算法
  13. 如果你对web前端学习感到迷茫的话请看完本文
  14. 借助FLASH技术美化VBA操作界面
  15. 检查计算机网络是否连通可运行什么命令,用ping命令如何检测目标主机是否能连通...
  16. 梧州计算机学考查询,学考成绩查询
  17. 如何鉴别项目经理/软件设计师的水平
  18. qlearning算法_通过OpenAI Gym编写第一个强化学习算法
  19. HISI3536安装交叉编译工具链
  20. iOS12 捷径(热门推荐)

热门文章

  1. 物联卡不用了怎么处理,物联卡不想用了可以丢掉吗
  2. 易语言下载到c盘文件覆盖,易语言写到文件不覆盖
  3. iOS开发者申请发布证书及真机调试 图文详解
  4. 2012-03-28-1
  5. QML+cmake 下取消打印 QML debugging is enabled.Only use this in a safe environment.
  6. Android Studio 如何 安装 HAXM
  7. dx12 龙书第十二章学习笔记 -- 几何着色器
  8. msf之ms17-010永恒之蓝漏洞
  9. DHL邮编城市错误导致无法上传解决办法
  10. 红领巾竟然还能买?!---小学记忆