2010-12-09 8 views
2

Ich mache ein Wort Automatisierung über Ruby und bin relativ unerfahren mit ihm. Ich versuche, meinen Code jetzt functionise und ich auf diesem Fehler kämeRuby - WIN32OLE Funktionserstellung

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>' 

Was ich bin aus diesem Beispielcode immer geklopft i

up
#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 
+0

Wenn Sie daran gedacht hätten, Ihren Code einzurücken, wäre das Vergessen, 'doc' als Parameter zu übergeben, eindeutiger. –

Antwort

4

Ihr Problem ist, dass in Ihrer create_table Methode , Sie haben Variablen referenziert, die Sie im Hauptbereich haben, aber nicht an die Methode übergeben haben. Dies funktioniert für das, was Sie wollen:

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) 

Beachten Sie, dass es nun die Referenzen für doc und word in die Funktion übergeben wird. Außerdem erstellen Sie übrigens eine Tabelle mit 4 Zeilen und 2 Spalten.

+0

Prost dafür, ich habe bisher nur mit R in meinen Programmierreisen zu tun gehabt, also bin ich ziemlich unwissend darüber, wie die Dinge in Ruby funktionieren. Auch ja ich muss meine Kommentare in meinem ursprünglichen Code aktualisieren, es war nur ein Stück Code, den ich aus meinem Hauptskript kopiert habe, das seitdem bearbeitet worden ist. –

Verwandte Themen