这是我第一次写,因为我确实没有找到解决问题的方法。 我想允许我的用户从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()
因为这是一个非常棘手的问题,您能帮我吗?
非常感谢你们。
答案 0 :(得分:0)
您能够从命令行启动程序吗?
为什么不使用excel创建批处理文件,然后在shell中启动它?