Filling in a docvariable in Word docx using C#

怎甘沉沦 提交于 2019-12-08 20:32:54

问题


I've done this a hundred times in VB 6 but it's driving me nuts using C# 2008 and Word 2007. I created a docx file with two docvariables:

Some text here....

{docvariable replace1}
{docvariable replace2}

More text here......

I created a macro first to do it and it works:

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

Here's my C# code (mind you I'm learning this as I go):

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;

Here's the error I get:

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


回答1:


If you're interested, the way to do this via VS 2010 & Word 2010 is as follows:

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



回答2:


I think that you missed a ".value" in your code...

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

should be written as:

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



回答3:


The first guess: WordDocument.Variables("replace1")WordDocument.Variables["replace1"].

Update after finding it in MSDN: Apparently, the indexer is a ref parameter — see MSDN. So, you have to use a variable like this:

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

Strange. Perhaps there's a reason for such an API design.

Also, since the indexer does not define a setter, an assignment won't work. You would have to manipulate the internals of the Variable instance returned by the getter.




回答4:


Try this:

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


来源:https://stackoverflow.com/questions/3647024/filling-in-a-docvariable-in-word-docx-using-c-sharp

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!