импорт модуля Python при запуске из VBA - PullRequest
0 голосов
/ 21 января 2019

Я впервые пишу, потому что действительно не нашел решения своей проблемы.Я хочу разрешить моему пользователю запускать некоторые программы на Python из Excel.Итак, у меня есть этот код VBA в какой-то момент:

lg_ErrorCode = wsh.Run(str_PythonPath & " " & str_PythonArg, 1, bl_StopVBwhilePython)

    If lg_ErrorCode <> 0 Then
        MsgBox "Couldn't run python script! " _
                + vbCrLf + CStr(lg_ErrorCode)
       Run_Python = False
    End If

str_PythonPath = "C:\Python34\python.exe C:\Users\XXXX\Documents\4_Python\Scan_FTP\test.py"
str_PythonArg = "arg1 arg2"

После многократного тестирования строка ошибки в Python - это когда я пытаюсь импортировать другой модуль (я уточняю, что этот код VBA работает без строки нижев Python):

import fct_Ftp как ftp

Архитектура модуля выглядит следующим образом:

4_Python
-folder: Scan_FTP
  - file: test.py (The one launch from VBA)
-file: fct_Ftp.py

(Для информации я изменяю архитектуруфайл, и попробуйте скопировать файл в другое место, чтобы проверить его безуспешно)

При импорте файла Test.py не возникает проблем с:

import sys, os
sys.path.append('../')

Но из VBA этот импорт не работает.Итак, я нашел это более общее решение, которое не работает также из Excel / VBA

import sys, os

def m_importingFunction():
    str_absPath = os.path.abspath('')
    str_absPathDad = os.path.dirname(str_absPath)
    l_absPathSons = [os.path.abspath(x[0]) for x in os.walk('.')] 
    l_Dir = l_absPathSons + [str_absPathDad]
    l_DirPy = [Dir for Dir in l_Dir if 'Python' in Dir]
    for Dir in l_DirPy:
        sys.path.append(Dir)
        print(Dir)

m_importingFunction()



try:
    import fct_Ftp as ftp
#    ftp = __import__ ("fct_Ftp")
    write += 'YAAAA'    # write a file YAAAA from Python
except:
    write += 'NOOOOOO'  # write a file NOOOOO from VBA

f= open(write + ".txt","w+")
f.close()

Не могли бы вы помочь мне, поскольку это очень сложные вопросы?

Большое спасибо вамребята.

1 Ответ

0 голосов
/ 22 января 2019

Вы можете запустить вашу программу из командной строки?

Почему бы не создать пакетный файл с Excel, который вы затем запустите в оболочке?

...