使用C#填写Word docx中的docvariable

6

我曾经在VB 6中做过这件事情一百次,但在使用C#2008和Word 2007时却让我感到疯狂。我创建了一个带有两个文档变量的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' 不能像方法一样使用。 Blockquote

4个回答

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
根据我的经验,Update()调用并不必要。实际上,就这个问题而言,在第三行之后的任何内容都是不必要的(除非你想关闭Word)。 - Gullbyrd

1
我认为你的代码中漏掉了一个 ".value" ...
WordDocument.Variables("replace1") = "This is a test";

should be written as:

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

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

0
第一个猜测:WordDocument.Variables("replace1")WordDocument.Variables["replace1"]更新:在 MSDN 上找到后,显然索引器是一个 ref 参数 — 请参见 MSDN。因此,您必须使用像这样的变量:
string replace = "replace1";
WordDocument.Variables[ref replace] = ...;

很奇怪,或许这个API的设计有它的理由。

而且,由于索引器没有定义setter,所以赋值操作不会起作用。你需要通过操作getter返回的Variable实例内部来实现。


感谢您的尝试,Ondrej,但是它产生了以下错误:"错误1:Microsoft.Office.Interop.Word.Variables.this[ref object]的最佳重载方法匹配具有一些无效参数。" - Norm

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接