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

举报
迷彩 发表于 2023/04/30 11:04:53 2023/04/30
【摘要】 前言自动化办公能大量提高我们的工作效率,而且利用自动化办公能够有效避免枯燥无味的机械操作,把手腾出来做其他更有意义的事.现在加上Python能够提供大量开源的自动化办公的库,能够快速实现很多需要开通vip才能使用的功能.比如文档之间格式的转换.比如,我要制作邀请函.如果office掌握不好.一张一张制作也是一件很痛苦的事,利用Python就能够实现批量生成邀请函.除了自动化办公,python...

前言

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

执行打包命令:

pyinstaller -F qtfile.py

打包的的过程可能比较漫长;慢慢等。看到succesfully说明打包成功。


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

【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。