示例解决方案
简单测试.rb
require "rubygems"
require "celerity"
word_to_search = ARGV[0]
word_to_check = ARGV[1]
#puts "DEBUG - word_to_search: #{word_to_search}"
#puts "DEBUG - word_to_check: #{word_to_check}"
browser = Celerity::Browser.new
browser.goto('http://www.google.com')
browser.text_field(:name, 'q').value = word_to_search
browser.button(:name, 'btnG').click
puts browser.text.include? word_to_check
假设我们必须将Mac 上的 Excel 2011与这个简单的脚本连接起来,该脚本接受几个输入参数并返回一个结果
测试.sh
#!/bin/bash --login
rvm use jruby > NULL
ruby simpletest.rb $1 $2
我们编写了一个可以通过 VBA 代码调用的 shell;请注意设置适当的权限 chmod u+x test.sh
shebang:#!/bin/bash --login
这是运行rvm
以选择 jruby 所必需的(这是唯一支持的 rubycelerity
VBA 模块(用户定义函数)
Public Function SimpleTest(sWordToSearch, sWordToCheck)
Dim sCommand As String
sCommand = "do shell script ""cd /Users/ronda/projects/so-test1; ./test.sh "
sCommand = sCommand & sWordToSearch & " "
sCommand = sCommand & sWordToCheck & """"
SimpleTest = MacScript(sCommand)
End Function
这段代码中的注意事项:/Users/ronda/projects/so-test1
是我们脚本的路径
使用与测试
测试公式中的用户定义函数
顺便说一句,可以通过将脚本运行到较低级别来简化问题的诊断:
在 AppleScript 编辑器中测试
在终端中测试 shell 脚本
$ cd ~/projects/so-test1
$ ./test.sh Ruby Language
true
$ ./test.sh Fish Language
false
独立测试 jruby 脚本
$ rvm use jruby
Using /Users/ronda/.rvm/gems/jruby-1.7.11
$ ruby simpletest.rb Ruby Language
true
$ ruby simpletest.rb Ruby Fish
false
进一步阅读
只是几个有用的链接:
- 阅读如何从 Excel VBA for Mac 2011 发出 HTTP GET作为使用popen 和管道的替代(可能是最强大的)方法的答案
- 访问您的自定义函数