从VBA启动时导入python模块

时间:2019-01-21 06:08:06

标签: python excel vba import python-import

这是我第一次写,因为我确实没有找到解决问题的方法。 我想允许我的用户从Excel启动一些Python程序。 所以我在某个时候有这个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代码在没有下面一行的情况下仍能正常工作):

将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 :(得分:0)

您能够从命令行启动程序吗?

为什么不使用excel创建批处理文件,然后在shell中启动它?