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 # 獲取當前所有的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”。
最終項目就做完瞭!
代碼我已經提交到github上,如果想瞅瞅源碼可以上我的github上看看:xddno1/python_student_big_study: 青年大學習檢查未學習名單的python腳本 (github.com)
最後還有一個小bug,那就是pyqt5窗口的圖標不展示的問題,這個有知道的大佬還請指出解決辦法!
以上就是python 辦公自動化——基於pyqt5和openpyxl統計符合要求的名單的詳細內容,更多關於python 自動化統計名單的資料請關註WalkonNet其它相關文章!
推薦閱讀:
- python 按照sheet合並多個Excel的示例代碼(多個sheet)
- python 使用xlsxwriter循環向excel中插入數據和圖片的操作
- Python 操作 Excel 之 openpyxl 模塊
- python 對excel交互工具的使用詳情
- python 使用openpyxl讀取excel數據