结合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说明打包成功。

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


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


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

目录
相关文章
|
7月前
|
监控 Python
使用Python编写的电脑上网时间控制软件:实现家长监管功能
在当今数字化时代,孩子们对互联网的依赖程度越来越高,但是过度使用互联网可能会对他们的健康和学业产生负面影响。为了帮助家长有效地监管孩子们的上网行为,我们开发了一款基于Python的电脑上网时间控制软件,具有家长监管功能。
253 1
|
前端开发 Java 定位技术
【软件实战】5分钟拥有一款自己的软件(教程+成品展示)(下)
【软件实战】5分钟拥有一款自己的软件(教程+成品展示)
201 0
|
7月前
|
JavaScript Java 测试技术
基于Java的公司员工工作日志办公系统的设计与实现(源码+lw+部署文档+讲解等)
基于Java的公司员工工作日志办公系统的设计与实现(源码+lw+部署文档+讲解等)
229 3
|
7月前
|
存储 缓存 前端开发
女朋友不想开Processon会员,我魔改了一个无限制的在线绘图软件
女朋友不想开Processon会员,我魔改了一个无限制的在线绘图软件
|
数据安全/隐私保护
又一款有虚拟形象的录屏软件来了,制作教学类视频的神器!(文末送福利)
Wondershare PDFelement:一款强大的pdf处理软件,一键去除水印、编辑图片、批量处理PDF等等,拥有很多强大的功能!
221 0
|
区块链 索引
【软件实战】5分钟拥有一款自己的软件(教程+成品展示)(上)
【软件实战】5分钟拥有一款自己的软件(教程+成品展示)
137 0
抽签软件免费提供,代码开源,可用作抽奖、课堂抽背、游戏分组等活动场合,可以直接下载
抽签软件免费提供,代码开源,可用作抽奖、课堂抽背、游戏分组等活动场合,可以直接下载
715 1
抽签软件免费提供,代码开源,可用作抽奖、课堂抽背、游戏分组等活动场合,可以直接下载
|
SQL 前端开发 Java
校园外卖点餐系统——Day01【项目简介、开发环境搭建、后台系统登录和退出功能】
校园外卖点餐系统——Day01【项目简介、开发环境搭建、后台系统登录和退出功能】
205 0
校园外卖点餐系统——Day01【项目简介、开发环境搭建、后台系统登录和退出功能】
|
自然语言处理 小程序 JavaScript
开发知识竞赛答题活动小程序过程中使用到的实用工具库介绍
开发知识竞赛答题活动小程序过程中使用到的实用工具库介绍
开发知识竞赛答题活动小程序过程中使用到的实用工具库介绍
|
数据可视化
【微信小游戏制作】微信小游戏,你无须懂代码,无须UI,只有一丝想法也行!
这是我参与11月更文挑战的第2天,活动详情查看:2021最后一次更文挑战
413 0
【微信小游戏制作】微信小游戏,你无须懂代码,无须UI,只有一丝想法也行!