如何使用Python tkinter可执行文件创建Word文档?

2024-04-25 21:44:22 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在尝试创建一个pythonttkinter可执行文件,它可以显示Oracle数据库中的信息,还可以将这些信息导出到msword(.docx)文档中。它也同样适用于Excel。在

目前,每当我通过PyCharm运行脚本时,我都能够创建一个新的Word文档和一个新的Excel电子表格;但是,在使用pyinstaller创建可执行文件之后,我不能导出新的Word文档,但是我可以导出一个新的Excel电子表格。在

我想我要么需要找到一些未知的Word模块来创建Word文档,就像xlsxwriter创建Excel表格一样;要么我需要以某种方式将Word文件绑定到可执行文件中。在

Python3.7,PyCharm 2019.1.1社区版。 模块-tkinter、python docx、docx mailmerge、xlsxwriter、pyinstaller

我使用的是docx-mailmerge并将数据合并到Word文档模板中,但后来我尝试使用python-docx尝试“创建”我自己的Word文档。(来自python docx的文档:“实际上,它只允许您对现有文档进行更改;只是如果您从一个没有任何内容的文档开始,一开始可能会觉得您是在从头开始创建一个文档。”)

我尝试过使用pyinstaller创建一个文件夹分发和单个文件可执行文件。我认为我最好的选择是创建一个文件夹,然后手动将Word模板添加到某个子文件夹中,但我不知道是哪个。如果是这样的话,我相信我可以使用任何一个单词模块。在

我可以用xlsxwriter导出Excel电子表格,没问题。在

我添加了一个try/except语句来捕捉错误(并在应用程序中添加了一个显示错误名称的标签),我在python文档中浏览了整个异常列表,但只有catch all“except:”才能捕获。在

def data_pull(user, pw, _id):
    # connects to oracle and pulls data into a list

class App(Frame):
    # a login frame not shown
    # self.create_widgets()

    def create_widgets(self):
        # various StringVar() variables
        # oracle data entry query (=_id)
        # Button that calls entry query
        # frames and scrolledtext for displaying the data
        # Button to export to word
        # Button to export to excel

     def word_export(self, lst, path):
        # export using python-docx

     def excel_export(self, lst, path):
        # export using xlsxwriter

     def entry_callback(self):
        # a = data_pull(user, pw, _id)
        # parse a into a long string
        # pass string to scrolledtext widget

从PyCharm内部运行时,Word文档不会有问题,但从可执行文件运行时,不会发生任何事情。在


Tags: 模块to文档self可执行文件datadefexport
1条回答
网友
1楼 · 发布于 2024-04-25 21:44:22

正如在注释中已经提到的,问题是当您试图使用^{}时,它有一些实际上与python无关的template files,因此PyInstaller无法识别它们,因此它们将在最终可执行文件中丢失。在

在这些情况下,一个简单的方法就是嵌入整个依赖目录。您需要使用Tree class并添加docx的模板路径(记住要用系统上正确的路径替换./env/Lib/site-packages/docx/templates):

a = Analysis(
...
a.datas += Tree("./env/Lib/site-packages/docx/templates", prefix='docx/templates')
pyz = PYZ(a.pure, a.zipped_data,
             cipher=block_cipher)
...

相关问题 更多 >