无法在Excel 2016 for MAC上从VBA调用Python脚本

问题描述 投票:1回答:1

当我运行以下内容并从Excel for Mac 2011将一些参数传递给我现有的python脚本时,它可以正常工作,但Excel for Mac 2016没有任何反应,即没有错误,也没有结果。

#If Mac Then
Private Declare Function system Lib "libc.dylib" (ByVal command As String) As Long
Const python3Dir As String = "/usr/local/bin/python3"
#End If

Sub btnScrape_Click()
' Uses system() to run external command
' system() only returns the exit code. If you want to get the output from the command,

Dim result As String
Dim command As String
Dim myDir As String

myDir = getPosixPath(ThisWorkbook.Path)

command = "cd " & myDir & " && " & python3Dir & " myPythonScript.py ######## ####"
Debug.Print command
result = system(command)
Debug.Print result
' 0 means OK.
MsgBox "Check report.txt"
End Sub



Function getPosixPath(macPath As String) As String
Dim scriptToRun As String

scriptToRun = "tell application ""Finder""" & Chr(13)
scriptToRun = scriptToRun & "set appUserPath to POSIX path of " & """" & macPath & """" & Chr(13)
scriptToRun = scriptToRun & "end tell" & Chr(13)
getPosixPath = MacScript(scriptToRun)
End Function

Python设置:

which -a python3
/Library/Frameworks/Python.framework/Versions/3.5/bin/python3
/usr/local/bin/python3

which -a python
/usr/bin/python

echo $PATH
/Library/Frameworks/Python.framework/Versions/3.5/bin/python3

Excel for Mac 2016是否需要修改/添加特定内容?

python excel macos vba excel-vba
1个回答
0
投票

我自己在寻找如何在Mac OS上运行Excel VBA以运行任何非VBA的答案。基本上,如何创建一个将“越狱”出Excel的功能。

但这里有多远:MacScript是一个解决方案,允许您在Office 2011中使用瘦AppleScript包装器来运行任何东西。在Office 2016中,由于“沙盒”,MacScript已被弃用。相反,我们应该使用AppleScriptTask指令。

一般的想法是你必须在~/Library/Application Scripts/com.microsoft.Excel/中创建一个AppleScript脚本,它将以某种方式使用正确的参数启动你的python程序。除了一些有用的hints by Ron de Bruin之外,我找不到关于我们应该怎么做的很多迹象。到目前为止,最先进的技术似乎是:“只看那边,祝你好运”。

因此,我们学习VBA和Python是不够的,现在我们也应该学习AppleScript和MacOS的复杂性。我不确定微软的人们在想什么,他们希望我们在一个不起眼的目录中完成安装AppleScript文件的所有循环,只是为了有权运行...一个python程序。难道他们只是不希望我们这样做(“设计有缺陷”)?或者这是微软 - 苹果贸易战的一个模糊的副作用?或者微软的“企业大脑”根本不知道存在问题?无论情况如何,他们都没有告诉我们。

如果您只需要从您的应用程序运行一个不返回任何内容的Python脚本,您可能会有一个XLWings的解决方案,它提供了一个指令RunPython。有点耐心,你可以设法给它变量参数。不幸的是,他们用Python编写的Excel函数的精彩构思将在Windows上运行,但不适用于MacOS(难怪)。

但是,如果像我一样,你肯定想要使用VBA从Python脚本中获取值,那么遗憾的是,它仍然是一个在危险的沼泽中不断进行的任务。

© www.soinside.com 2019 - 2024. All rights reserved.