2010-09-05 33 views
6

He hecho esto cientos de veces en VB 6 pero me tuercas de conducción usando C# 2008 y Word 2007. He creado un archivo docx con dos DocVariables:de llenado en un DocVariable en Word docx utilizando C#

Some text here.... 

{docvariable replace1} 
{docvariable replace2} 

More text here...... 

creé una primera macro para hacerlo y funciona:

Sub FillDocVariable() 
' 
' FillDocVariable Macro 
' 
' 

    ActiveDocument.Variables("replace1").Value = "This is a test" 
    ActiveDocument.Variables("replace2").Value = "it is only a test." 
    ActiveDocument.Fields.Update 

End Sub 

Aquí está mi código C# (te estoy aprendiendo esto como voy):

using Microsoft.Office.Interop.Word; 
object paramMissing = Type.Missing; 
     object openfileName = @"C:\testing\Documents\1.docx"; 

     ApplicationClass WordApplication = new ApplicationClass(); 
     Document WordDocument = WordApplication.Documents.Open(ref openfileName, 
     ref paramMissing, ref paramMissing, ref paramMissing, 
     ref paramMissing, ref paramMissing, ref paramMissing, 
     ref paramMissing, ref paramMissing, ref paramMissing, 
     ref paramMissing, ref paramMissing, ref paramMissing, 
     ref paramMissing, ref paramMissing, ref paramMissing); 

     WordDocument.Variables("replace1") = "This is a test"; 
     WordDocument.Variables("replace2").Value = "it's only a test!"; 
     WordDocument.Fields.Update; 

Aquí está el error que consigo:

Error 1 Non-invocable member 'Microsoft.Office.Interop.Word._Document.Variables' cannot be used like a method. Blockquote

Respuesta

0

La primera suposición: WordDocument.Variables("replace1")WordDocument.Variables["replace1"].

Actualice después de encontrarlo en MSDN: Aparentemente, el indexador es un parámetro ref - consulte MSDN. Por lo tanto, debe usar una variable como esta:

string replace = "replace1"; 
WordDocument.Variables[ref replace] = ...; 

Extraño. Tal vez haya una razón para tal diseño de API.

Además, dado que el indexador no define un colocador, una asignación no funcionará. Tendría que manipular las partes internas de la instancia Variable devuelta por el getter.

+0

Gracias por la oportunidad, Ondrej, pero que produjo el siguiente error: "Error 1 \t \t El partido mejor método sobrecargado para 'Microsoft.Office.Interop.Word.Variables.this [objeto] ref' tiene algunos inválida argumento." – Norm

+0

@Norm Consulte la respuesta editada. –

0

Prueba esto:

object variable1 = "This is a test"; 
object variable2 = "it's only a test!"; 
Variable var1 = WordDocument.Variables.Add("replace1", ref variable1); 
Variable var2 = WordDocument.Variables.Add("replace2", ref variable1); 
WordDocument.Fields.Update(); 
2

Si está interesado, la manera de hacer esto a través de VS 2010 & Word 2010 es el siguiente:

Application app = new Application(); 
Document doc = word.Documents.Add(filepath); 
doc.Variables["var_name"].Value = your_value_here; 
doc.Fields.Update(); 
doc.Save(); 
doc.Close(); 
app.Quit(); 
+0

En mi experiencia, la llamada a Update() no es necesaria. De hecho, para los fines de esta pregunta, nada después de la tercera línea es necesario (a menos que desee cerrar Word). – Gullbyrd

1

Creo que se ha perdido una". valor" en su código ...

WordDocument.Variables("replace1") = "This is a test"; 

debe escribirse como:

WordDocument.Variables("replace1").Value = "This is a test"; 
Cuestiones relacionadas