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简单的函数定义和用法实例
May 07 Python
Python 专题四 文件基础知识
Mar 20 Python
Python实现调度算法代码详解
Dec 01 Python
python的exec、eval使用分析
Dec 11 Python
numpy中以文本的方式存储以及读取数据方法
Jun 04 Python
python打包exe开机自动启动的实例(windows)
Jun 28 Python
python自动保存百度盘资源到百度盘中的实例代码
Aug 26 Python
OpenCV+face++实现实时人脸识别解锁功能
Aug 28 Python
python 如何将数据写入本地txt文本文件的实现方法
Sep 11 Python
Python pip install之SSL异常处理操作
Sep 03 Python
彻底搞懂python 迭代器和生成器
Sep 07 Python
VSCODE配置Markdown及Markdown基础语法详解
Jan 19 Python
Python 循环读取数据内存不足的解决方案
May 25 #Python
python基于机器学习预测股票交易信号
Python数据可视化之绘制柱状图和条形图
总结Python常用的魔法方法
Python入门学习之类的相关知识总结
python munch库的使用解析
May 25 #Python
python调试工具Birdseye的使用教程
You might like
Mysql和网页显示乱码解决方法集锦
2008/03/27 PHP
php流量统计功能的实现代码
2012/09/29 PHP
php实现四舍五入的方法小结
2015/03/03 PHP
深入解析WordPress中加载模板的get_template_part函数
2016/01/11 PHP
php+MySql实现登录系统与输出浏览者信息功能
2016/07/01 PHP
jQuery遍历对象、数组、集合实例
2014/11/08 Javascript
JavaScript错误处理
2015/02/03 Javascript
JS基于cookie实现来宾统计记录访客信息的方法
2015/08/04 Javascript
js密码强度校验
2015/11/10 Javascript
JS动态生成年份和月份实例代码
2017/02/04 Javascript
Angular2使用Guard和Resolve进行验证和权限控制
2017/04/24 Javascript
微信小程序学习笔记之函数定义、页面渲染图文详解
2019/03/28 Javascript
vue实现在线预览pdf文件和下载(pdf.js)
2019/11/26 Javascript
Ant Design Pro 之 ProTable使用操作
2020/10/31 Javascript
[47:36]Optic vs Newbee 2018国际邀请赛小组赛BO2 第二场 8.17
2018/08/18 DOTA
Django查找网站项目根目录和对正则表达式的支持
2015/07/15 Python
Python的MongoDB模块PyMongo操作方法集锦
2016/01/05 Python
python中struct模块之字节型数据的处理方法
2019/08/27 Python
ubuntu 18.04 安装opencv3.4.5的教程(图解)
2019/11/04 Python
使用pyinstaller逆向.pyc文件
2019/12/20 Python
利用Tensorboard绘制网络识别准确率和loss曲线实例
2020/02/15 Python
tensorflow生成多个tfrecord文件实例
2020/02/17 Python
Python操作Word批量生成合同的实现示例
2020/08/28 Python
python编写实现抽奖器
2020/09/10 Python
python爬虫中url管理器去重操作实例
2020/11/30 Python
css3边框_动力节点Java学院整理
2017/07/11 HTML / CSS
使用layui实现左侧菜单栏及动态操作tab项的方法
2020/11/10 HTML / CSS
阿迪达斯比利时官方商城:adidas比利时
2016/10/10 全球购物
Vivo俄罗斯官方在线商店:中国智能手机品牌
2019/10/04 全球购物
英国Radley包德国官网:Radley London德国
2019/11/18 全球购物
我的小天地教学反思
2014/04/30 职场文书
代理人委托书
2014/08/01 职场文书
2014年仓库管理员工作总结
2014/11/18 职场文书
业务员年终工作总结2015
2015/05/28 职场文书
Python 居然可以在 Excel 中画画你知道吗
2022/02/15 Python
OpenStack虚拟机快照和增量备份实现方法
2022/04/04 Servers