При запуске приложения Python в EXE я получаю .. ‘vba_extract.py » не распознается

#python #vba #operating-system #pyinstaller #xlsxwriter

#питон #vba #операционная система #pyinstaller #xlsxwriter

Вопрос:

Я создал .EXE файл из Python scripy с помощью pyinstaller.

Часть программы должна получить файл xlsm и извлечь его VBA в файл bin. Я передаю файл xlsm в EXE-файл, используя .spec файл:

 datas=[('gen_ClipFile_V3p1.xlsm','.')],
 

Затем, когда программа получит возможность извлечь ‘VBAProject.bin’ из файла xlsm

Я получаю сообщение об ошибке:

‘vba_extract.py ‘ не распознается как внутренняя или внешняя команда

Мой соответствующий код:

 import xlsxwriter
import os
from pathlib import Path


# a function called by tkinter file open
def compareDesigns(self):

# find the EXE temporary working directory path
    bundle_dir = Path(getattr(sys, '_MEIPASS', Path.cwd()))
    strbundle_dir = str(bundle_dir)
    XLSMtoExtract = os.path.join(strbundle_dir, 'gen_ClipFile_V3p1.xlsm')
    os.system("vba_extract.py"   XLSMtoExtract)
 

Мой файл спецификации включает в себя:

 datas=[('gen_ClipFile_V3p1.xlsm','.')],
hiddenimports=['matplotlib', 'pathlib', 'time', 'sys', 're', 'operator', 'numpy', 'mplcursors', 'collections', 'xlsxwriter', 'os', 'tkinter', 'pyinstaller'],
 

Мне удается запустить приложение на моем компьютере, но другие пользователи с другими компьютерами сообщают об этой ошибке.

Я верю, что я должен найти vba_extract.py путь во временной области exe и ссылка на него, но я знаю, как это сделать.

Ответ №1:

Если xlsxwriter установлен правильно, его vba_extract.py следует добавить в Windows %PATH%. Однако это может быть недоступно в той же среде, в которой выполняется ваш основной скрипт.

Некоторые предложения, в порядке, обратном рекомендациям:

  1. Выясните проблему с путем.
  2. Игнорируйте проблему с путем и включите vba_extract.py код непосредственно в свою программу. Он не очень большой, и вы могли бы пропустить большую часть обработки исключений, если знаете, что с целевым файлом xlsm все в порядке.
  3. Игнорируйте часть извлечения макроса и просто отправьте макрос VBA с кодом. Однако это также может привести к проблемам с путями.
  4. Вы также можете сохранить макрос в шестнадцатеричном / текстовом формате в своей программе и преобразовать его обратно в двоичный файл «на лету».