2010-12-09 39 views
2

Je suis en train de faire de l'automation de mots via ruby ​​et je n'y connais pas assez d'expérience. Je suis en train de functionise mon code maintenant et je suis à venir à travers cette erreurRuby - création de la fonction WIN32OLE

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

Ce que je reçois de cet exemple de code i cloque

#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

Si vous vous rappeliez d'indenter votre code, vous auriez dû oublier de passer 'doc' comme paramètre. –

Répondre

4

Votre problème est que l'intérieur de votre méthode create_table , vous avez référencé des variables que vous avez dans la portée principale mais que vous n'avez pas passées à la méthode. Cela fonctionne pour ce que vous voulez:

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) 

Notez que passe maintenant les références pour doc et word dans la fonction. En outre, en passant, vous créez une table avec 4 lignes et 2 colonnes.

+0

Bravo pour ça, je n'ai eu affaire à R qu'à ce jour dans mes voyages de programmation, donc je suis assez ignorant de la façon dont les choses fonctionnent en ruby. Aussi oui j'ai besoin de mettre à jour mes commentaires dans mon code original, c'était juste un morceau de code que j'ai copié hors de mon script principal qui a été édité depuis. –