Как создать документ Word, используя исполняемый файл Python tkinter? - PullRequest
0 голосов
/ 10 июля 2019

Я пытаюсь создать исполняемый файл Python tkinter, который отображает информацию из базы данных Oracle, а также может экспортировать эту информацию в документ MS Word (.docx). То же самое относится и к Excel.

В настоящее время, когда я запускаю скрипт через PyCharm, я могу создавать новый документ Word и новую электронную таблицу Excel; однако после использования pyinstaller для создания исполняемого файла я не могу экспортировать новый документ Word, но могу экспортировать новую электронную таблицу Excel.

Мне кажется, мне нужно либо найти какой-нибудь неизвестный модуль Word, который фактически создает документы Word точно так же, как xlsxwriter создает листы Excel; или мне нужно как-то связать файл Word в исполняемый файл.

Python 3.7, PyCharm 2019.1.1 Community Edition. Модули - tkinter, python-docx, docx-mailmerge, xlsxwriter, pyinstaller

Я использовал docx-mailmerge и объединял данные в шаблон документа Word, но затем я попытался использовать python-docx, чтобы попытаться «создать» свой собственный документ Word. (Из документации для python-docx: «На самом деле, это позволяет вам только вносить изменения в существующие документы; просто, если вы начинаете с документа, который не имеет никакого содержимого, сначала может показаться, что вы его создаете». с нуля. ")

Я попытался с помощью pyinstaller создать дистрибутив папки и исполняемый файл с одним файлом. Я думаю, что мой лучший вариант - создать папку, а затем вручную добавить шаблон Word в некоторую подпапку, но я не знаю, какая именно. Если это так, я думаю, что я могу использовать любой модуль Word.

Я могу экспортировать таблицы Excel, используя xlsxwriter, без проблем.

Я добавил инструкцию try / Кроме того, чтобы перехватить ошибку (и добавил в приложение метку, которая будет отображать имя ошибки), и я просмотрел весь список исключений в документации по python, но только все " кроме: "поймал бы.

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 создается без проблем, но когда он запускается из исполняемого файла, ничего не происходит.

1 Ответ

1 голос
/ 11 июля 2019

Как уже упоминалось в комментариях, проблема в том, что когда вы пытаетесь использовать python-docx, у него есть файлы шаблонов , которые на самом деле не связаны с python, поэтому PyInstaller не будетраспознайте их, и, таким образом, они будут пропущены в конечном исполняемом файле.

Простой способ в этих ситуациях - просто внедрить весь каталог зависимостей.Вам нужно использовать класс дерева и добавить путь к шаблонам 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)
...
...