首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使用python tkinter可执行文件创建word文档?

如何使用python tkinter可执行文件创建word文档?
EN

Stack Overflow用户
提问于 2019-07-11 04:32:43
回答 1查看 1K关注 0票数 0

我正在尝试创建一个python tkinter可执行文件,它可以显示Oracle数据库中的信息,还可以将这些信息导出到MS Word (.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模板添加到某个子文件夹中,但我不知道是哪个子文件夹。如果是这样的话,我相信我可以使用任何一个Word模块。

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

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

代码语言:javascript
复制
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文档是没有问题的,但是当从可执行文件运行时,什么也没有发生。

EN

回答 1

Stack Overflow用户

发布于 2019-07-11 14:28:01

正如已经在评论中提到的,问题是当你尝试使用python-docx时,它有一些实际上与python无关的template files,所以PyInstaller不会识别它们,因此在最终的可执行文件中会遗漏它们。

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

代码语言:javascript
复制
a = Analysis(
...
a.datas += Tree("./env/Lib/site-packages/docx/templates", prefix='docx/templates')
pyz = PYZ(a.pure, a.zipped_data,
             cipher=block_cipher)
...
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56978228

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档