前言
自动化办公能大量提高我们的工作效率,而且利用自动化办公能够有效避免枯燥无味的机械操作,把手腾出来做其他更有意义的事.现在加上Python能够提供大量开源的自动化办公的库,能够快速实现很多需要开通vip才能使用的功能.比如文档之间格式的转换.比如,我要制作邀请函.如果office掌握不好.一张一张制作也是一件很痛苦的事,利用Python就能够实现批量生成邀请函.除了自动化办公,python还能够实现很多有趣的功能,感兴趣的可以自行深入了解,接下来本文手把手带你实现文档转换功能以及封装到pyqt5,并打包成exe可执行文件
准备
因为我要把日常的操作封装到一起.比word文档转PDF/PDF转word文档以及文本处理需要安装以下库
pip install pdf2docx pip install docx2pdf #word转pdf
pyqt5还不了解的童鞋可以参考这篇文章:《值得学习的 Python GUI 库 - pyQt5 快速入门及精美界面设计体验》
操作系统:windows 64位
接下来进入实操。
实操
首先是导入相关的库
importsysimportosfromdocx2pdfimportconvertfrompdf2docximportConverterfromPyQt5.QtWidgetsimport*
涉及到文件的读写操作所以,所以需要导入os库以及sys库。
使用qt5设计GUI
classMainForm(QWidget): def__init__(self, name='MainForm'): super(MainForm,self).__init__() self.setWindowTitle(name) self.cwd=os.getcwd() # 获取当前程序文件位置self.resize(600,400) # 设置窗体大小# 选择待转的文件self.btn_chooseFile=QPushButton(self) self.btn_chooseFile.setObjectName("btn_chooseFile") self.btn_chooseFile.setText("选取需要转换文件") # 保存的目录选择self.btn_chooseDir=QPushButton(self) self.btn_chooseDir.setObjectName("btn_chooseDir") self.btn_chooseDir.setText("保存到文件") #源self.textEdit=QTextEdit(self) self.textEdit.setEnabled(True) self.textEdit.setAccessibleName("") self.textEdit.setPlaceholderText('请选择文件') self.textEdit.setFixedSize(580,30) self.textEdit.setObjectName("textEdit") # 保存self.textEdit2=QTextEdit(self) self.textEdit2.setEnabled(True) self.textEdit2.setAccessibleName("") self.textEdit2.setPlaceholderText('请选择保存目录') self.textEdit2.setFixedSize(580, 30) self.textEdit2.setObjectName("textEdit2") # TXT生成SQLself.btn_saveFile=QPushButton(self) self.btn_saveFile.setObjectName("btn_saveFiletxt2sql") self.btn_saveFile.setText("TXT生成SQL") # Word转PDFself.btn_saveFile2=QPushButton(self) self.btn_saveFile2.setObjectName("btn_saveFilew2pdf") self.btn_saveFile2.setText("Word转PDF") # PDF转Wordself.btn_saveFile3=QPushButton(self) self.btn_saveFile3.setObjectName("btn_saveFilepdf2w") self.btn_saveFile3.setText("PDF转Word") self.eittxt=QLabel(self) self.eittxt.setText("说明:请根据文件类型选择对应的按钮转换") self.eittxt.setObjectName("eittxt") self.eittxt.setFixedSize(580, 30) # 设置布局layout=QVBoxLayout() layout.addWidget(self.btn_chooseFile) layout.addWidget(self.textEdit) layout.addWidget(self.btn_chooseDir) layout.addWidget(self.textEdit2) layout.addWidget(self.eittxt) layout.addWidget(self.btn_saveFile) layout.addWidget(self.btn_saveFile2) layout.addWidget(self.btn_saveFile3) self.setLayout(layout) # 给按钮绑定点击事件self.btn_chooseDir.clicked.connect(self.slot_btn_chooseDir) self.btn_chooseFile.clicked.connect(self.slot_btn_chooseFile) self.btn_saveFile.clicked.connect(self.slot_btn_saveFile) self.btn_saveFile2.clicked.connect(self.slot_wtopdfbtn_saveFile) self.btn_saveFile3.clicked.connect(self.slot_pdftowbtn_saveFile)
接着在类里给实现按钮点击事件的函数
defslot_btn_chooseDir(self): fileName_choose, filetype=QFileDialog.getSaveFileName(self, "保存文件", self.cwd, # 起始路径"All Files (*);;Text Files (*.txt)") iffileName_choose=="": print("\n取消选择") returnprint("\n你选择要保存的文件为:") print(fileName_choose) print("文件筛选器类型: ", filetype) self.textEdit2.setText(fileName_choose) defslot_btn_chooseFile(self): fileName_choose, filetype=QFileDialog.getOpenFileName(self, "选取文件", self.cwd, # 起始路径"All Files (*);;Text Files (*.txt)") # 设置文件扩展名过滤,用双分号间隔iffileName_choose=="": print("\n取消选择") returnprint("\n你选择的文件为:") print(fileName_choose) self.textEdit.setText(fileName_choose) print("文件筛选器类型: ",filetype) #txt转sqldefslot_btn_saveFile(self): withopen(self.textEdit.toPlainText(), 'r',encoding="utf-8") asfile: whileTrue: # readline()默认换行txt=file.readline() iftxt: print(txt, end='') withopen(self.textEdit2.toPlainText(), 'a+', encoding='utf-8') aswf: text='insert into table (code) value ("'+txt+'"); \n'wf.write(text) else: break#word转pdfdefslot_wtopdfbtn_saveFile(self): convert(self.textEdit.toPlainText(), self.textEdit2.toPlainText()) #pdf转worddefslot_pdftowbtn_saveFile(self): # pdf文件名称pdf_name=self.textEdit.toPlainText() # 要转换的docx文件名称docx_name=self.textEdit2.toPlainText() # 加载pdf文档cv=Converter(pdf_name) cv.convert(docx_name) cv.close()
然后就是调用窗口
if__name__=="__main__": app=QApplication(sys.argv) mainForm=MainForm("文件转换") mainForm.show() sys.exit(app.exec_())
网络异常,图片无法展示
|
这样就简单实现了各种文档文件之间的格式转换,本文中的txt转sql语句中的sql我是在代码里写定了,你也可以再页面增加输入框有自己输入,还有就是为了使用方便,还可以使用pyinstaller打包成exe可执行文件
pyinstaller
的安装命令:
pip install pyinstaller
如果上述命令无法安装可使用清华或者豆瓣的镜像安装
pip install -i https://pypi.douban.com/simple/ pyinstaller #豆瓣源pip install -i https://pypi.tuna.tsinghua.edu.cn/simple pyinstaller #清华源
执行打包命令:
pyinstaller -F qtfile.py
打包的的过程可能比较漫长;慢慢等。看到succesfully说明打包成功。
网络异常,图片无法展示
|
网络异常,图片无法展示
|
从上图可以看出文件特别大,而且打开很慢,可以思考怎么把文件打包更小,启动更快?下次考~哈哈