是否可以通过Excel VBA运行Jruby / Celerity脚本并将结果输出到Excel

时间:2014-07-05 01:25:54

标签: ruby excel vba jruby celerity

我有一些Jruby / Celerity脚本,我想从Excel VBA运行,然后将脚本结果输出到Excel工作表。这可能吗?任何人都可以提出潜在的方法或一些潜在的资源。

我希望实现的目标:

  1. Mac Excel 2011 VBA代码调用Celerity脚本并传递脚本将使用的参数。
  2. 使用VBA传递的参数执行脚本。
  3. 脚本完成其执行并将结果返回到Excel工作表。
  4. 编辑:我还应该提一下,我在Mac上运行Excel 2011。我的一个困惑之处在于,我在使用ruby自动化Excel时发现的所有内容似乎都假设是Windows操作系统。 (#需要WIN32OLE库)。我是否会在OS X下使用运行excel的相同库。

    非常感谢。

1 个答案:

答案 0 :(得分:2)

示例解决方案

simpletest.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 ,该脚本需要几个输入参数并返回结果

test.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(这是celerity支持的唯一ruby

所必需的

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是我们脚本的路径

用法&测试

在公式

中测试用户定义的函数

SimpleTest User Defined Function Usage

通过将脚本运行到较低级别,可以简化问题的诊断:

在AppleScript编辑器enter image description here

中进行测试

在终端

中测试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

进一步阅读

只是一些有用的链接:

  1. 使用How do I issue an HTTP GET from Excel VBA for Mac 2011
  2. 将此popen and pipes的答案作为替代方法(可能是最强大的)阅读
  3. Accessing Your Custom Functions