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 相关文章推荐
Django框架中的对象列表视图使用示例
Jul 21 Python
浅谈Python中chr、unichr、ord字符函数之间的对比
Jun 16 Python
Python实现自动发送邮件功能
Mar 02 Python
Python 在字符串中加入变量的实例讲解
May 02 Python
python实现根据指定字符截取对应的行的内容方法
Oct 23 Python
Python使用random.shuffle()打乱列表顺序的方法
Nov 08 Python
Python3.5面向对象与继承图文实例详解
Apr 24 Python
python pprint模块中print()和pprint()两者的区别
Feb 10 Python
python求最大公约数和最小公倍数的简单方法
Feb 13 Python
详解python模块pychartdir安装及导入问题
Oct 22 Python
python反编译教程之2048小游戏实例
Mar 03 Python
python神经网络ResNet50模型
May 06 Python
Python 循环读取数据内存不足的解决方案
May 25 #Python
python基于机器学习预测股票交易信号
Python数据可视化之绘制柱状图和条形图
总结Python常用的魔法方法
Python入门学习之类的相关知识总结
python munch库的使用解析
May 25 #Python
python调试工具Birdseye的使用教程
You might like
ThinkPHP的RBAC(基于角色权限控制)深入解析
2013/06/17 PHP
PHP swfupload图片上传的实例代码
2013/09/30 PHP
ThinkPHP模板之变量输出、自定义函数与判断语句用法
2014/11/01 PHP
js判断两个日期是否相等的方法
2013/09/10 Javascript
js读取注册表的键值示例
2013/09/25 Javascript
js实现文章文字大小字号功能完整实例
2014/11/01 Javascript
javascript匿名函数实例分析
2014/11/18 Javascript
js实现仿网易点击弹出提示同时背景变暗效果
2015/08/13 Javascript
jQuery实现鼠标双击Table单元格变成文本框及输入内容后更新到数据库的方法
2015/11/25 Javascript
详解webpack异步加载业务模块
2017/06/23 Javascript
JS实现简单的选择题测评系统代码思路详解(demo)
2017/09/03 Javascript
js定时器实现倒计时效果
2017/11/05 Javascript
微信小程序中使用Async-await方法异步请求变为同步请求方法
2019/03/28 Javascript
在vue项目中使用sass语法问题
2019/07/18 Javascript
基于Express框架使用POST传递Form数据
2019/08/10 Javascript
CountUp.js实现数字滚动增值效果
2019/10/17 Javascript
vant中的toast轻提示实现代码
2020/11/04 Javascript
Python中的一些陷阱与技巧小结
2015/07/10 Python
python编程实现归并排序
2017/04/14 Python
基于Django contrib Comments 评论模块(详解)
2017/12/08 Python
Python3.6实现连接mysql或mariadb的方法分析
2018/05/18 Python
Django框架实现逆向解析url的方法
2018/07/04 Python
Python使用pickle模块储存对象操作示例
2018/08/15 Python
Python使用random.shuffle()打乱列表顺序的方法
2018/11/08 Python
使用Python自动化破解自定义字体混淆信息的方法实例
2019/02/13 Python
python随机生成库faker库api实例详解
2019/11/28 Python
Python基于yield遍历多个可迭代对象
2020/03/12 Python
CSS3 实现的缩略图悬停效果
2020/12/09 HTML / CSS
仓库主管的岗位职责
2013/12/04 职场文书
幼儿园家长寄语
2014/04/02 职场文书
明星员工获奖感言
2014/08/14 职场文书
2015年双拥工作总结
2015/04/08 职场文书
离职证明范本
2015/06/12 职场文书
2015年重阳节主持词
2015/07/04 职场文书
2016年学校安全教育月活动总结
2016/04/06 职场文书
HTML+CSS+JS实现图片的瀑布流布局的示例代码
2021/04/22 HTML / CSS