python 办公自动化——基于pyqt5和openpyxl统计符合要求的名单


Posted in Python onMay 25, 2021

首先,那肯定是用python获取学校发下来的未学习名单,但是我忘记我之前用什么来操作办公软件了(最后项目作出来的时候才想起来是pandas),我就上网搜了一下,试了很多库但是都不支持xlsx文件格式(只支持最老版本的xls),最终openpyxl成功的读取了xlsx文件,于是我就用了openpyxl库来读取文件,下面是python代码

studyedstudent = []
 wb = load_workbook(xlsx_path)
 sheets = wb.worksheets  # 获取当前所有的sheet
 sheet1 = sheets[0]
 for col in sheet1['A']:
     studyedstudent.append(col.value)

这样studyedstudent列表中就是本期已学习的名单了

我又向团支书要了我们班的团员表,同样用该方法读出了我们班的团员,我将他放入一个列表中,当常量来用。

剩下的就是遍历我们班团员,看一下团员是否在已学习的名单中,如果不在,则将该团员放入另一个列表(未学习名单中)

下面是python代码

wb = load_workbook(xlsx_path)
sheets = wb.worksheets  # 获取当前所有的sheet
myclassstudent = ['陈荣森', '邓京锐', '邓文凯', '何江伟', '何锦胜', '李春江', '李锦科', '廖金威', '廖钧濠', '林荣添', '刘继洪', '罗炜芊', '麦洋华', '彭浩林', '唐爱萍', '涂骏', '冼东潮', '肖华锋', '谢泽琛', '杨奋发', '张杰森', '郑佳浩', '植美麟', '周天宝']
# 24团员
# print(len(myclassstudent))
# 获取第一张sheet
sheet1 = sheets[0]
studyedstudent = []
for col in sheet1['A']:
    studyedstudent.append(col.value)
# print(studyedstudent)
unstudyedstudent = []
for i in myclassstudent:
    if i not in studyedstudent:
        unstudyedstudent.append(i)

这样一波操作,unstudystudent中就是要给团支书的未学习名单了!

但是鉴于使用者可能没有python环境,所以我决定将unstudystudent写入一个txt文件中,并且将代码打包成exe文件。

下面是代码

wb = load_workbook(xlsx_path)
sheets = wb.worksheets  # 获取当前所有的sheet
myclassstudent = ['陈荣森', '邓京锐', '邓文凯', '何江伟', '何锦胜', '李春江', '李锦科', '廖金威', '廖钧濠', '林荣添', '刘继洪', '罗炜芊', '麦洋华', '彭浩林', '唐爱萍', '涂骏', '冼东潮', '肖华锋', '谢泽琛', '杨奋发', '张杰森', '郑佳浩', '植美麟', '周天宝']
# 24团员
# print(len(myclassstudent))
# 获取第一张sheet
sheet1 = sheets[0]
studyedstudent = []
for col in sheet1['A']:
    studyedstudent.append(col.value)
# print(studyedstudent)
unstudyedstudent = []
for i in myclassstudent:
    if i not in studyedstudent:
        unstudyedstudent.append(i)
file = open('大学习未完成名单.txt', 'w')
for i in unstudyedstudent:
    file.write(i)
    file.write('\n')
file.close()

打包需要先下载一个打包的库打开cmd 输入“pip install Pyinstaller”即可,然后再cmd中进入要打包的文件夹,输入“Pyinstaller -F main.py”等待打包即可,main.py是我要打包的文件名字。

但是这是个小黑板使用起来不太方便,我决定做一个GUI,我就用了我最近在学的pyqt5。

首先把main文件封装成函数,下面是main.py的代码

from openpyxl import load_workbook


def getnostudytxt(xlsx_path):
    wb = load_workbook(xlsx_path)
    sheets = wb.worksheets  # 获取当前所有的sheet
    myclassstudent = ['陈荣森', '邓京锐', '邓文凯', '何江伟', '何锦胜', '李春江', '李锦科', '廖金威', '廖钧濠', '林荣添', '刘继洪', '罗炜芊', '麦洋华', '彭浩林', '唐爱萍', '涂骏', '冼东潮', '肖华锋', '谢泽琛', '杨奋发', '张杰森', '郑佳浩', '植美麟', '周天宝']
    # 24团员
    # print(len(myclassstudent))
    # 获取第一张sheet
    sheet1 = sheets[0]
    studyedstudent = []
    for col in sheet1['A']:
        studyedstudent.append(col.value)
    # print(studyedstudent)

    unstudyedstudent = []
    for i in myclassstudent:
        if i not in studyedstudent:
            unstudyedstudent.append(i)
    file = open('大学习未完成名单.txt', 'w')

    for i in unstudyedstudent:
        file.write(i)
        file.write('\n')
    file.close()
    return unstudyedstudent

接下来是写界面,不妨命名为ui.py,下面是代码。

import sys
from PyQt5.QtWidgets import (QWidget, QTextEdit, QFileDialog, QApplication, QHBoxLayout, QVBoxLayout, QPushButton)
from PyQt5.QtGui import QIcon
import main


class Example(QWidget):
    def __init__(self):
        super().__init__()
        self.initUI()

    def initUI(self):
        okButton = QPushButton("选择文件")
        self.textEdit = QTextEdit()
        okButton.clicked.connect(self.showDialog)
        vvbox = QVBoxLayout()
        vvbox.addWidget(okButton)
        vvbox.addStretch(1)
        hbox = QHBoxLayout()
        hbox.addLayout(vvbox)
        hbox.addWidget(self.textEdit)
        vbox = QVBoxLayout()
        vbox.addLayout(hbox)
        self.setLayout(vbox)
        self.setGeometry(300, 300, 350, 300)
        self.setWindowTitle("青年大学习获取未学习名单")
        self.setWindowIcon(QIcon("head.ico"))
        self.show()

    def showDialog(self):
        # 弹出文件选择器
        fname = QFileDialog.getOpenFileName(self, "Open file")
        # 如果选择了文件
        if fname[0]:
            # 打开第一个文件
            f = open(fname[0], "r")
            print(f.name)
            mylist = main.getnostudytxt(f.name)
            print(mylist)
            for i in mylist:
                self.textEdit.append(i)


if __name__ == "__main__":
    app = QApplication(sys.argv)
    ex = Example()
    sys.exit(app.exec_())

最后就是打包了,这次要打包的是窗口文件,所以打包的指令中要多加一个-w,而且我给打包后的文件添加了一个图标(head.ico),所以输入“Pyinstaller -F -w -i head.ico ui.py”。

最终项目就做完了!

python 办公自动化——基于pyqt5和openpyxl统计符合要求的名单

代码我已经提交到github上,如果想瞅瞅源码可以上我的github上看看:xddno1/python_student_big_study: 青年大学习检查未学习名单的python脚本 (github.com)

最后还有一个小bug,那就是pyqt5窗口的图标不展示的问题,这个有知道的大佬还请指出解决办法!

以上就是python 办公自动化——基于pyqt5和openpyxl统计符合要求的名单的详细内容,更多关于python 自动化统计名单的资料请关注三水点靠木其它相关文章!

Python 相关文章推荐
python处理圆角图片、圆形图片的例子
Apr 25 Python
Python 获取新浪微博的最新公共微博实例分享
Jul 03 Python
windows7 32、64位下python爬虫框架scrapy环境的搭建方法
Nov 29 Python
24式加速你的Python(小结)
Jun 13 Python
django多个APP的urls设置方法(views重复问题解决)
Jul 19 Python
Python3.6+selenium2.53.6自动化测试_读取excel文件的方法
Sep 06 Python
Python 基于wxpy库实现微信添加好友功能(简洁)
Nov 29 Python
Python打包工具PyInstaller的安装与pycharm配置支持PyInstaller详细方法
Feb 27 Python
python对指定字符串逆序的6种方法(小结)
Apr 02 Python
Python读入mnist二进制图像文件并显示实例
Apr 24 Python
解析python中的jsonpath 提取器
Jan 18 Python
python如何为list实现find方法
May 30 Python
Python 循环读取数据内存不足的解决方案
May 25 #Python
python基于机器学习预测股票交易信号
Python数据可视化之绘制柱状图和条形图
总结Python常用的魔法方法
Python入门学习之类的相关知识总结
python munch库的使用解析
May 25 #Python
python调试工具Birdseye的使用教程
You might like
用Php编写注册后Email激活验证的实例代码
2013/03/11 PHP
PHP重定向与伪静态区别
2017/02/19 PHP
用javascript获取textarea中的光标位置
2008/05/06 Javascript
Extjs学习笔记之三 extjs form更多的表单项
2010/01/07 Javascript
js中各浏览器中鼠标按键值的差异
2011/04/07 Javascript
JQuery扩展插件Validate 1 基本使用方法并打包下载
2011/09/05 Javascript
js中如何把字符串转化为对象、数组示例代码
2013/07/17 Javascript
Jquery Post处理后不进入回调的原因及解决方法
2014/07/15 Javascript
jQuery对JSON数据进行排序输出的方法
2015/06/24 Javascript
深入理解(function(){... })();
2016/08/16 Javascript
详解vue指令与$nextTick 操作DOM的不同之处
2018/08/02 Javascript
在Vuex使用dispatch和commit来调用mutations的区别详解
2018/09/18 Javascript
原生js实现可兼容PC和移动端的拖动滑块功能详解【测试可用】
2019/08/15 Javascript
JS FormData对象使用方法实例详解
2020/02/12 Javascript
JavaScript实现原型封装轮播图
2020/12/27 Javascript
[03:11]完美世界DOTA2联赛PWL DAY8集锦
2020/11/09 DOTA
Python编写登陆接口的方法
2017/07/10 Python
Python 文件操作的详解及实例
2017/09/18 Python
Python简单获取网卡名称及其IP地址的方法【基于psutil模块】
2018/05/24 Python
Python利用ORM控制MongoDB(MongoEngine)的步骤全纪录
2018/09/13 Python
python opencv 读取本地视频文件 修改ffmpeg的方法
2019/01/26 Python
利用Python代码实现一键抠背景功能
2019/12/29 Python
Python内置类型性能分析过程实例
2020/01/29 Python
Python动态导入模块和反射机制详解
2020/02/18 Python
django数据模型中null和blank的区别说明
2020/09/02 Python
详解基于python的全局与局部序列比对的实现(DNA)
2020/10/07 Python
详解通过HTML5 Canvas实现图片的平移及旋转变化的方法
2016/03/22 HTML / CSS
法国低价在线宠物商店:bitiba.fr
2020/07/03 全球购物
Linux中如何用命令创建目录
2015/01/12 面试题
汽修专业学生自我鉴定
2013/11/16 职场文书
黄金酒广告词
2014/03/21 职场文书
销售顾问工作计划书
2014/09/15 职场文书
2014年超市工作总结
2014/11/19 职场文书
名人传读书笔记
2015/06/26 职场文书
2016优秀员工先进事迹材料
2016/02/25 职场文书
浅谈Redis 中的过期删除策略和内存淘汰机制
2022/04/03 Redis