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时间整形转标准格式的示例分享
Feb 14 Python
python线程、进程和协程详解
Jul 19 Python
Python实现桶排序与快速排序算法结合应用示例
Nov 22 Python
Python实现的字典值比较功能示例
Jan 08 Python
Python实现删除时保留特定文件夹和文件的示例
Apr 27 Python
对Python 数组的切片操作详解
Jul 02 Python
如何使用Python标准库进行性能测试
Jun 25 Python
Python企业编码生成系统之系统主要函数设计详解
Jul 26 Python
python list多级排序知识点总结
Oct 23 Python
pycharm解决关闭flask后依旧可以访问服务的问题
Apr 03 Python
Python3创建Django项目的几种方法(3种)
Jun 03 Python
python图片验证码识别最新模块muggle_ocr的示例代码
Jul 03 Python
Python 循环读取数据内存不足的解决方案
May 25 #Python
python基于机器学习预测股票交易信号
Python数据可视化之绘制柱状图和条形图
总结Python常用的魔法方法
Python入门学习之类的相关知识总结
python munch库的使用解析
May 25 #Python
python调试工具Birdseye的使用教程
You might like
第八节--访问方式
2006/11/16 PHP
PHP输出数组中重名的元素的几种处理方法
2012/09/05 PHP
PHP删除数组中指定值的元素常用方法实例分析【4种方法】
2018/08/21 PHP
Array对象方法参考
2006/10/03 Javascript
top.location.href 没有权限 解决方法
2008/08/05 Javascript
js中substring和substr的定义和用法
2014/05/05 Javascript
jQuery实现ajax调用WCF服务的方法(附带demo下载)
2015/12/04 Javascript
JavaScript基础知识及常用方法总结
2016/01/10 Javascript
JavaScript弹窗基础篇
2016/04/27 Javascript
Easyui笔记2:实现datagrid多行删除的示例代码
2017/01/14 Javascript
JS闭包可被利用的常见场景小结
2017/04/09 Javascript
jquery实现限制textarea输入字数的方法
2017/09/06 jQuery
利用javascript如何随机生成一定位数的密码
2017/09/22 Javascript
Vue插件打包与发布的方法示例
2018/08/20 Javascript
详解jQuery获取特殊属性的值以及设置内容
2018/11/14 jQuery
vue微信分享到朋友圈 vue微信发送给好友
2018/11/28 Javascript
JS实现的检验身份证格式并输出出生日期,年龄,性别,出生地示例
2019/05/17 Javascript
JS自定义滚动条效果
2020/03/13 Javascript
Vue实现Header渐隐渐现效果的实例代码
2020/11/05 Javascript
[01:09:50]VP vs Pain 2018国际邀请赛小组赛BO2 第二场
2018/08/20 DOTA
Python里disconnect UDP套接字的方法
2015/04/23 Python
对Python中for复合语句的使用示例讲解
2018/11/01 Python
python发送多人邮件没有展示收件人问题的解决方法
2019/06/21 Python
Python 分享10个PyCharm技巧
2019/07/13 Python
Pycharm 安装 idea VIM插件的图文教程详解
2020/02/21 Python
pycharm全局搜索的具体步骤
2020/07/28 Python
Python爬取网页信息的示例
2020/09/24 Python
使用Python画了一棵圣诞树的实例代码
2020/11/27 Python
详解CSS3中强大的filter(滤镜)属性
2017/06/29 HTML / CSS
详解HTML5中的拖放事件(Drag 和 drop)
2016/11/14 HTML / CSS
html5 video全屏播放/自动播放的实现示例
2020/08/06 HTML / CSS
怀旧收藏品和经典纪念品:Betty’s Attic
2018/08/29 全球购物
法国滑雪假期的专家:Ski Planet
2019/11/02 全球购物
.NET面试10题
2014/02/24 面试题
文明礼仪小标兵事迹
2014/01/12 职场文书
党员领导干部民主生活会批评与自我批评发言
2014/09/28 职场文书