使用C#填写Word docx中的docvariable

我已经在VB 6中完成了这一百次,但它让我疯狂使用C#2008和Word 2007.我创建了一个带有两个docvariables的docx文件:

Some text here.... {docvariable replace1} {docvariable replace2} More text here...... 

我首先创建了一个宏来做它并且它有效:

 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 

这是我的C#代码(请注意,我正在学习这个代码):

 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; 

这是我得到的错误:

错误1不可调用的成员’Microsoft.Office.Interop.Word._Document.Variables’不能像方法一样使用。 大段引用

如果您有兴趣,通过VS 2010和Word 2010执行此操作的方式如下:

 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(); 

我认为你错过了代码中的“.value”…

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

应该写成:

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

第一个猜测: WordDocument.Variables("replace1")WordDocument.Variables["replace1"]

在MSDN中找到它后更新 :显然,索引器是一个ref参数 – 请参阅MSDN 。 所以,你必须使用这样的变量:

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

奇怪。 也许这样的API设计是有原因的。

此外,由于索引器没有定义setter,因此赋值不起作用。 您必须操纵getter返回的Variable实例的内部。

试试这个:

 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();