在
Excel
中通过
VBA
调用
applescript
控制运行Mac,可以操作应用,运行
.sh文件
,构建复杂的工作流。
等价于在
Windows
里用
Shell()
调用
.bat
文件。
Mac Excel 2016开始
AppleScript()
命令被弃用,官方说明见参考1。
2 命令结构 AppleScriptTask(arg1, arg2, arg3)
arg1 = applescript文件的名字
存放位置固定,如果没有,就新建一个。
~/Library/Application Scripts/com.microsoft.Excel/
坑!我没注意前面有~,就建到/Library/Application Scripts/com.microsoft.Excel/,所以后面虽然东西都写对了,运行一直报错。。。直到看到参考资料3,才发现路径是
Users/用户名/
。
错误 = 运行时错误“5”:无效的过程调用或参数
arg2= applescript文件中运行的handler(异步的回调函数/子程序),arg3=传递的参数
仅能运行接受一个参数的函数
在一个applescript如果有几个函数,只运行叫做arg2参数指向的函数
一些保证能理解applescript的说明
使用自带的脚本编辑器测试代码
结构
on end
之间是函数
设置参数赋值是
set x to 1
或者
set x to "a"
后是单行注释
例一:官方例子,返回拼接的字符串
on myapplescripthandler(paramString)
#do something with paramString
return "You told me " & paramString
end myapplescripthandler
测试代码就是在applescript里面再写一行 myapplescripthandler("1")
,然后运行。
对应的vba代码
Sub runAppleSc()
Dim myScriptResult As String
myScriptResult = AppleScriptTask("MyAppleScriptFile.scpt", "myapplescripthandler", "1")
MsgBox myScriptResult
End Sub
例二:调用一句python语句
on PythonCommand(pythonScript)
do shell script "python -c " & "'" & pythonScript & "'"
end PythonCommand
PythonCommand("print(42)")
注意里面的引号,这句python -c后面应接引号,所以用双引号加了一对单引号。
对应的vba代码
Sub CallPython()
Dim result As String
Dim pythonScript As String
pythonScript = "print(42)"
result = AppleScriptTask("PythonCommand.scpt", "PythonCommand", pythonScript)
MsgBox result
End Sub
例三:调用一个sh文件
.sh文件在 /Users/yourname/Desktop,试运行的时候修改yourname为你的路径。
文件名 1.sh
内容:生成一个内容是2,名字叫1.txt的文件。
#!/bin/bash
echo 2 > /Users/yourname/Desktop/1.txt
注意如果不给全路径,默认的路径并不是文件所在的地方,不知道在哪里,但是是一个需要管理员权限的地方,所以运行会报错。
applescript
on runShell(path)
do shell script "'" & path & "'"
end runShell
set x to "/Users/yourname/Desktop/1.sh"
runShell(x)
vba 代码
Sub runShell()
Dim myScriptResult As String
myScriptResult = AppleScriptTask("path.scpt", "runShell", "/Users/weishuang/Desktop/1.sh")
End Sub
3 运行说明
只要不报错,就表示运行成功了
输出的结果需要通过赋值获得,如例一,例二
因为有括号,即使没有输出结果,也必须赋值,不然会报错
不想赋值写成 AppleScriptTask arg1, arg2, arg3
4 完整操作
VBA中编写代码
确定指定的applescript存放位置存在
指定位置新建applescript文件
applescript文件中编写接收一个参数的函数
运行VBA中的代码
5 参考资料
[1] 官方说明
[2] 运行Python
[3] 复杂例子,发现哪里错误
[4] Applescript简介