Практично ли вызывать функции vbscript из Ruby с использованием win32ole? - PullRequest
2 голосов
/ 16 июня 2011

Практично ли вызывать функцию VBScript, такую ​​как VBScript Chr(charcode), из Ruby с использованием win32ole?

Справочная информация: Разрабатывая, как добавить несколько красиво отформатированных заголовков на лист Excel, я следовал своей стандартной процедуре: записать макрос Excel, скопировать и вставить код.

VBScript:

ActiveWindow.View = xlPageLayoutView
With ActiveSheet.PageSetup
    ' Irrelevant options snipped
    .CenterHeader = "&F" & Chr(10) & "&A"
    ' More irrelevant options snipped
End With

следующий код Ruby

# workbook is an existing workbook object
worksheet = workbook.Worksheets.Add
worksheet.PageSetup.CenterHeader = "&F \n &A"

работает, но мне пришлось поискать документацию Chr(charcode) , чтобы убедиться, что это то же самое. Я пытался сделать

worksheet.PageSetup.CenterHeader = "&F" + workbook.Chr(10) + "&A"

но получил

WIN32OLERuntimeError: unknown property or method: `Chr'
    HRESULT error code:0x80020006
      Unknown name.
        from (irb):6:in `method_missing'
        from (irb):6
        from c:/Ruby19/bin/irb:12:in `<main>'

Есть ли практический способ сделать последний подход?

Ответы [ 2 ]

1 голос
/ 06 июля 2014

Я бы не назвал скрипт vbscript для чего-то, что проще сделать в Ruby, но это возможно.

Как вы его просили:

require 'win32ole'

sc = WIN32OLE.new("ScriptControl")
sc.language="VBScript"
center_header = sc.eval('"&F" & Chr(10) & "&A"') #"&F\n&A"

и как вы могли бы сделать это в самом Ruby

"&F" + 10.chr + "&A" #"&F\n&A"

или

"&F\n&A" #"&F\n&A"
1 голос
/ 16 июня 2011

как насчет

worksheet.PageSetup.CenterHeader = "&F" + 10.chr + "&A"
...