Ruby - создание функции WIN32OLE - PullRequest
       69

Ruby - создание функции WIN32OLE

2 голосов
/ 09 декабря 2010

Я занимаюсь автоматизацией слов через ruby ​​и относительно неопытен.Я пытаюсь функционировать мой код сейчас, и я сталкиваюсь с этой ошибкой

NameError: undefined local variable or method `doc' for main:Object
    from (irb):148:in `create_table'
    from (irb):152
    from C:/Ruby192/bin/irb:12:in `<main>'

, которую я получаю из этого примера кода, я поднял

#Get the correct packages
require 'win32ole'

#setting up the Word
word = WIN32OLE.new('Word.Application')
#Shows the word Application
word.Visible = true
#Setting doc to the active document
doc = word.Documents.Add
doc = word.ActiveDocument

def create_table
  doc.Tables.Add(word.Selection.Range, 4, 2) #Creates a table with 3 rows and 2 columns
  doc.Tables(1).Borders.Enable = true
end

create_table

1 Ответ

4 голосов
/ 09 декабря 2010

Ваша проблема в том, что внутри вашего метода create_table вы ссылались на переменные, которые есть в основной области действия, но не переданы методу.Это работает для того, что вы хотите:

require 'win32ole'

#setting up the Word
word = WIN32OLE.new('Word.Application')
#Shows the word Application
word.Visible = true
#Setting doc to the active document
doc = word.Documents.Add
doc = word.ActiveDocument

def create_table(d, w)
  d.Tables.Add(w.Selection.Range, 4, 2)
  d.Tables(1).Borders.Enable = true
end

create_table(doc, word)

Обратите внимание, что теперь он передает ссылки для doc и word в функцию.Также, кстати, вы создаете таблицу с 4 строками и 2 столбцами.

...