使用C#填写Word docx中的docvariable

时间:2010-09-05 17:33:23

标签: c# variables ms-word 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'   不能像方法一样使用。   块引用

4 个答案:

答案 0 :(得分:2)

如果您有兴趣,可以通过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();

答案 1 :(得分:1)

我认为你错过了一个" .value"在你的代码......

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

应写成:

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

答案 2 :(得分:0)

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

在MSDN中找到它后,

更新:显然,索引器是一个ref参数 - 请参阅MSDN。所以,你必须使用这样的变量:

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

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

此外,由于索引器未定义setter,因此分配将不起作用。您必须操纵getter返回的Variable实例的内部。

答案 3 :(得分:0)

试试这个:

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