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 相关文章推荐
web.py中调用文件夹内模板的方法
Aug 26 Python
python类继承用法实例分析
Oct 10 Python
Python用zip函数同时遍历多个迭代器示例详解
Nov 14 Python
Sanic框架配置操作分析
Jul 17 Python
Python Socket编程之多线程聊天室
Jul 28 Python
Python生成器generator用法示例
Aug 10 Python
python 设置xlabel,ylabel 坐标轴字体大小,字体类型
Jul 23 Python
Laravel框架表单验证格式化输出的方法
Sep 25 Python
python dumps和loads区别详解
Feb 04 Python
在Django中自定义filter并在template中的使用详解
May 19 Python
Python如何实现后端自定义认证并实现多条件登陆
Jun 22 Python
Python对excel的基本操作方法
Feb 18 Python
Python 循环读取数据内存不足的解决方案
May 25 #Python
python基于机器学习预测股票交易信号
Python数据可视化之绘制柱状图和条形图
总结Python常用的魔法方法
Python入门学习之类的相关知识总结
python munch库的使用解析
May 25 #Python
python调试工具Birdseye的使用教程
You might like
php去除数组中重复数据
2014/11/18 PHP
JSON PHP中,Json字符串反序列化成对象/数组的方法
2018/05/31 PHP
php微信开发之图片回复功能
2018/06/14 PHP
php实现微信公众号创建自定义菜单功能的实例代码
2019/06/11 PHP
一个对于Array的简单扩展
2006/10/03 Javascript
基于jquery的$.ajax async使用
2011/10/19 Javascript
js判断是否为数组的函数: isArray()
2011/10/30 Javascript
鼠标移动到图片名上,显示图片的简单实例
2013/07/14 Javascript
js动态拼接正则表达式的两种方法
2014/03/04 Javascript
node.js中的fs.symlink方法使用说明
2014/12/15 Javascript
使用jQuery制作浮动工具栏的实例分享
2016/05/13 Javascript
JavaScript实现横线提示输入验证码随输入验证码输入消失的方法
2016/09/24 Javascript
Nodejs进阶:基于express+multer的文件上传实例
2016/11/21 NodeJs
AngularJS实践之使用ng-repeat中$index的注意点
2016/12/22 Javascript
详解Chai.js断言库API中文文档
2018/01/31 Javascript
一个基于react的图片裁剪组件示例
2018/04/18 Javascript
微信小程序实现滑动切换自定义页码的方法分析
2018/12/29 Javascript
Node.js API详解之 querystring用法实例分析
2020/04/29 Javascript
Vue实现指令式动态追加小球动画组件的步骤
2020/12/18 Vue.js
[05:34]2014DOTA2国际邀请赛中国区预选赛精彩TOPPLAY第二弹
2014/06/25 DOTA
python网络编程学习笔记(六):Web客户端访问
2014/06/09 Python
python基于mysql实现的简单队列以及跨进程锁实例详解
2014/07/07 Python
Tkinter中复选菜单是否被选中的判断与设置方式
2020/03/04 Python
Django框架获取form表单数据方式总结
2020/04/22 Python
用python打开摄像头并把图像传回qq邮箱(Pyinstaller打包)
2020/05/17 Python
python实现梯度下降算法的实例详解
2020/08/17 Python
python获得命令行输入的参数的两种方式
2020/11/02 Python
html5读取本地文件示例代码
2014/04/22 HTML / CSS
阿迪达斯希腊官方网上商店:adidas希腊
2019/04/06 全球购物
UNIX文件名称有什么规定
2013/03/25 面试题
体育专业个人的求职信范文
2013/09/21 职场文书
学习焦裕禄精神践行三严三实心得体会
2014/10/13 职场文书
2014学习十八届四中全会精神思想汇报范文
2014/10/23 职场文书
整改通知书
2015/04/20 职场文书
英语通知范文
2015/04/22 职场文书
详解Java实现设计模式之责任链模式
2021/06/23 Java/Android