您当前的位置:首页 > IT编程 > python
| C语言 | Java | VB | VC | python | Android | TensorFlow | C++ | oracle | 学术与代码 | cnn卷积神经网络 | gnn | 图像修复 | Keras | 数据集 | Neo4j | 自然语言处理 | 深度学习 | 医学CAD | 医学影像 | 超参数 | pointnet | pytorch | 异常检测 | Transformers | 情感分类 | 知识图谱 |

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

51自学网 2021-10-30 22:37:39
  python
这篇教程python 办公自动化——基于pyqt5和openpyxl统计符合要求的名单写得很实用,希望能帮到您。

首先,那肯定是用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  # 获取当前所有的sheetmyclassstudent = ['陈荣森', '邓京锐', '邓文凯', '何江伟', '何锦胜', '李春江', '李锦科', '廖金威', '廖钧濠', '林荣添', '刘继洪', '罗炜芊', '麦洋华', '彭浩林', '唐爱萍', '涂骏', '冼东潮', '肖华锋', '谢泽琛', '杨奋发', '张杰森', '郑佳浩', '植美麟', '周天宝']# 24团员# print(len(myclassstudent))# 获取第一张sheetsheet1 = 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  # 获取当前所有的sheetmyclassstudent = ['陈荣森', '邓京锐', '邓文凯', '何江伟', '何锦胜', '李春江', '李锦科', '廖金威', '廖钧濠', '林荣添', '刘继洪', '罗炜芊', '麦洋华', '彭浩林', '唐爱萍', '涂骏', '冼东潮', '肖华锋', '谢泽琛', '杨奋发', '张杰森', '郑佳浩', '植美麟', '周天宝']# 24团员# print(len(myclassstudent))# 获取第一张sheetsheet1 = 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_workbookdef 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 sysfrom PyQt5.QtWidgets import (QWidget, QTextEdit, QFileDialog, QApplication, QHBoxLayout, QVBoxLayout, QPushButton)from PyQt5.QtGui import QIconimport mainclass 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”。

最终项目就做完了!

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

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

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


Python 循环读取数据内存不足的解决方案
python实现简单的井字棋
万事OK自学网:51自学网_软件自学网_CAD自学网自学excel、自学PS、自学CAD、自学C语言、自学css3实例,是一个通过网络自主学习工作技能的自学平台,网友喜欢的软件自学网站。