Заполнение docvariable в Word docx с использованием C # - PullRequest
6 голосов
/ 05 сентября 2010

Я делал это сто раз в VB 6, но это сводило меня с ума, используя C # 2008 и Word 2007. Я создал файл docx с двумя переменными 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 голосов
/ 16 ноября 2011

Если вам интересно, способ сделать это через 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 голос
/ 20 мая 2015

Я думаю, что вы пропустили ".value" в вашем коде ...

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

должно быть записано как:

WordDocument.Variables("replace1").Value = "This is a test";
0 голосов
/ 01 ноября 2010

Попробуйте это:

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 голосов
/ 05 сентября 2010

Первое предположение: WordDocument.Variables("replace1")WordDocument.Variables["replace1"].

Обновление после его нахождения в MSDN: по-видимому, индексатор является параметром ref - см. MSDN .Итак, вы должны использовать переменную, подобную этой:

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

Странно.Возможно, есть причина для такого дизайна API.

Кроме того, поскольку индексатор не определяет установщик, назначение не будет работать.Вам придется манипулировать внутренностями экземпляра Variable, возвращаемого получателем.

...