zoukankan      html  css  js  c++  java
  • Excel Mac 2016 调用 Applescript

    1 概述

    • 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的说明

    1. 使用自带的脚本编辑器测试代码
    2. 结构 on end 之间是函数
    3. 设置参数赋值是 set x to 1 或者 set x to "a"
    4. 后是单行注释

    例一:官方例子,返回拼接的字符串

    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 完整操作

    1. VBA中编写代码
    2. 确定指定的applescript存放位置存在
    3. 指定位置新建applescript文件
    4. applescript文件中编写接收一个参数的函数
    5. 运行VBA中的代码

    5 参考资料

    [1] 官方说明
    [2] 运行Python
    [3] 复杂例子,发现哪里错误
    [4] Applescript简介



    ----ฅ(*ΦωΦ)ฅ---- cognata ad sidera tendit...
  • 相关阅读:
    JavaScript Math
    从俄罗斯套娃开始的信封嵌套问题
    Educational Codeforces Round 80 A
    位运算的奇技淫巧(三)
    Educational Round 95 (Div. 2) A
    POJ 1985.Cow Marathon(DFS求树的直径模板题)
    Web开发初探(系统理解Web知识点)
    经典Python案例实现
    Codeforces Round #670 (Div. 2) 深夜掉分(A
    Problem B
  • 原文地址:https://www.cnblogs.com/Xeonilian/p/applescripttask-used-in-vba-excel2016.html
Copyright © 2011-2022 走看看