结合pyqt5开发办公文档一键转换软件,以后再也不用开会员转文件了

简介: 自动化办公能大量提高我们的工作效率,而且利用自动化办公能够有效避免枯燥无味的机械操作,把手腾出来做其他更有意义的事.现在加上Python能够提供大量开源的自动化办公的库,能够快速实现很多需要开通vip才能使用的功能.比如文档之间格式的转换.比如,我要制作邀请函.如果office掌握不好.一张一张制作也是一件很痛苦的事,利用Python就能够实现批量生成邀请函.除了自动化办公,python还能够实现很多有趣的功能,感兴趣的可以自行深入了解,接下来本文手把手带你实现文档转换功能以及封装到pyqt5,并打包成exe可执行文件

前言


自动化办公能大量提高我们的工作效率,而且利用自动化办公能够有效避免枯燥无味的机械操作,把手腾出来做其他更有意义的事.现在加上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说明打包成功。

网络异常,图片无法展示
|


网络异常,图片无法展示
|


从上图可以看出文件特别大,而且打开很慢,可以思考怎么把文件打包更小,启动更快?下次考~哈哈

目录
相关文章
|
6月前
|
小程序 安全 数据安全/隐私保护
【产品上新】开发成员也能够提审上下架小程序啦?!
【产品上新】开发成员也能够提审上下架小程序啦?!
81 11
|
小程序 JavaScript 前端开发
小程序预订系统源码制作开发搭建
小程序预订系统作为一种新兴的商业模式,在近年来受到了越来越多的关注。
|
前端开发 Java 定位技术
【软件实战】5分钟拥有一款自己的软件(教程+成品展示)(下)
【软件实战】5分钟拥有一款自己的软件(教程+成品展示)
195 0
|
4月前
|
小程序
手机日记本小程序模板源码
手机日记本小程序模板源码
121 4
|
4月前
|
运维 小程序 前端开发
好的商业模式-----小程序定制资料,加一张好看的海报,在推广中就可以找到用户中了,云服务部署收5000,部署是一种服务,定制化,游戏开发创者,仲裁劳务会剪视频好,提供服务,想增加一些新功能收费,会说
好的商业模式-----小程序定制资料,加一张好看的海报,在推广中就可以找到用户中了,云服务部署收5000,部署是一种服务,定制化,游戏开发创者,仲裁劳务会剪视频好,提供服务,想增加一些新功能收费,会说
|
4月前
|
存储 小程序 数据库
拉货搬家服务小程序如何开发?拉货搬家服务小程序制作流程
随着现代社会的发展,拉货搬家已经成为人们生活中不可避免的一部分。然而,繁琐的拉货搬家过程往往会让人感到沮丧和压力。为了解决这个问题,开发一款拉货搬家服务小程序就显得尤为重要。这个小程序可以帮助用户轻松下单拉货搬家服务,让拉货搬家更加便捷高效。
|
6月前
|
JavaScript Java 测试技术
基于小程序的基于微信小程序的外卖点餐系统
基于小程序的基于微信小程序的外卖点餐系统
60 1
|
6月前
|
JavaScript 小程序 Java
基于微信小程序的校园自助打印系统的设计与实现(源码+lw+部署文档+讲解等)
基于微信小程序的校园自助打印系统的设计与实现(源码+lw+部署文档+讲解等)
126 1
|
6月前
|
JavaScript Java 测试技术
基于微信小程序的外卖点餐系统的设计与实现(源码+lw+部署文档+讲解等)
基于微信小程序的外卖点餐系统的设计与实现(源码+lw+部署文档+讲解等)
|
6月前
|
小程序 JavaScript Java
基于微信小程序的客运自助售票小程序的设计与实现(源码+lw+部署文档+讲解等)
基于微信小程序的客运自助售票小程序的设计与实现(源码+lw+部署文档+讲解等)