前言
自动化办公能大量提高我们的工作效率,而且利用自动化办公能够有效避免枯燥无味的机械操作,把手腾出来做其他更有意义的事.现在加上 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 位
接下来进入实操。
实操
首先是导入相关的库
import sys
import os
from docx2pdf import convert
from pdf2docx import Converter
from PyQt5.QtWidgets import *
复制代码
涉及到文件的读写操作所以,所以需要导入 os 库以及 sys 库。
使用 qt5 设计 GUI
class MainForm(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生成SQL
self.btn_saveFile = QPushButton(self)
self.btn_saveFile.setObjectName("btn_saveFiletxt2sql")
self.btn_saveFile.setText("TXT生成SQL")
# Word转PDF
self.btn_saveFile2 = QPushButton(self)
self.btn_saveFile2.setObjectName("btn_saveFilew2pdf")
self.btn_saveFile2.setText("Word转PDF")
# PDF转Word
self.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)
复制代码
接着在类里给实现按钮点击事件的函数
def slot_btn_chooseDir(self):
fileName_choose, filetype = QFileDialog.getSaveFileName(self,
"保存文件",
self.cwd, # 起始路径
"All Files (*);;Text Files (*.txt)")
if fileName_choose == "":
print("\n取消选择")
return
print("\n你选择要保存的文件为:")
print(fileName_choose)
print("文件筛选器类型: ", filetype)
self.textEdit2.setText(fileName_choose)
def slot_btn_chooseFile(self):
fileName_choose, filetype = QFileDialog.getOpenFileName(self,
"选取文件",
self.cwd, # 起始路径
"All Files (*);;Text Files (*.txt)") # 设置文件扩展名过滤,用双分号间隔
if fileName_choose == "":
print("\n取消选择")
return
print("\n你选择的文件为:")
print(fileName_choose)
self.textEdit.setText(fileName_choose)
print("文件筛选器类型: ",filetype)
#txt转sql
def slot_btn_saveFile(self):
with open(self.textEdit.toPlainText(), 'r',encoding="utf-8") as file:
while True:
# readline()默认换行
txt = file.readline()
if txt:
print(txt, end='')
with open(self.textEdit2.toPlainText(), 'a+', encoding='utf-8') as wf:
text = 'insert into table (code) value ("' + txt + '"); \n'
wf.write(text)
else:
break
#word转pdf
def slot_wtopdfbtn_saveFile(self):
convert(self.textEdit.toPlainText(), self.textEdit2.toPlainText())
#pdf转word
def slot_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 #清华源
复制代码
打包的的过程可能比较漫长;慢慢等。看到 succesfully 说明打包成功。
从上图可以看出文件特别大,而且打开很慢,可以思考怎么把文件打包更小,启动更快?下次考~哈哈
评论