我在OSX上的Excel 365中有一個VBA宏,我想啓動一個外部進程(一個python腳本),它將生成一個文件導入Excel。如何在OSX上從Excel 365 VBA啓動外部python進程?
我已經嘗試了很多東西,但都沒有爲我工作。我已在下面列出它們。
我第一次嘗試是使用:
Shell ("/usr/local/bin/python /tmp/myScript.py")
>> Run-time error '76': Path not found
然後我讀它首選舊的Mac風格的路徑,所以沒有
Shell ("Macintosh HD:usr:local:bin:python /tmp/myScript.py")
>> Run-time error '76': Path not found
這一點,在我的系統,是一個符號鏈接,因爲我使用的是HomeBrew,因此我解析了鏈接指向的位置並運行了該代碼:
Shell ("Macintosh HD:usr:local:Cellar:python:2.7.10_2:Frameworks:Python.framework:Versions:2.7:bin:python /tmp/myScript.py")
>> Run-time error '76': Path not found
並且爲了防萬一,裏德是一個具有UNIX風格路徑:
Shell ("/usr/local/Cellar/python/2.7.10_2/Frameworks/Python.framework/Versions/2.7/bin/python /tmp/myScript.py")
>> Run-time error '76': Path not found
然後我試圖使用MacScript運行它:
MacScript ("do shell script " + Chr(34) + "/usr/local/bin/python /tmp/myScript.py" + Chr(34))
>> Run-time error '5': Invalid procedure call or argument
所以,在我看來,MacScript()不可用在此版本中VBA的。
後來我發現描述如何揭示libc中的system
方法的文章:
Private Declare Function system Lib "libc.dylib" (ByVal command As String) As Long
system("/usr/local/bin/python /tmp/myScript.py")
>> Compile error: The code in this project must be updated for use on 64-bit systems. Please review and update DEclare statements and then mark them with the PtrSafe attribute.
做了一些更多的挖掘來檢查,我要補充這給了我:
Private Declare PtrSafe Function system Lib "libc.dylib" (ByVal command As String) As Long
system("/usr/local/bin/python /tmp/myScript.py")
>> Run-time error '453': File not found: libc.dylib
認爲它可能是sym-link相關的,我發現有一個sym鏈的鏈接libc.dylib -> libSystem.dylib -> libSystem.B.dylib
,所以我試過的最後一件事是:
Private Declare PtrSafe Function system Lib "libSystem.B.dylib" (ByVal command As String) As Long
system("/usr/local/bin/python /tmp/myScript.py")
>> Run-time error '453': File not found: libSystem.B.dylib
這就是我設法得到的。有人能從這裏指出我的正確方向嗎?
謝謝