2016-12-20 4 views
1

Я использую этот код, чтобы поместить содержимое в Field с помощью слова Interop:переписывает содержимое поля

var wordApp = new Microsoft.Office.Interop.Word.Application(); 
var wordDoc = wordApp.Documents.Add(Path.GetFullPath("myTemplate.dotx")); 
Field f = wordDoc.Fields[0]; 
f.Select(); 
wordApp.Selection.TypeText("some text"); 

, но это работает только один раз. Если я снова запустил оператор f.Select(), я получу COMException, сообщив, что объект ушел.

Есть ли способ перезаписать полевое содержимое? Или мне нужно работать с возможностью писать Field только один раз?

+0

Неясно, что вы имеете в виду, когда вы скажем, что код работает только один раз. –

+0

@RossBush Я попытался уточнить: когда вы вызываете код 'f.Select()' после части 'TypeText', я получаю' COMException', говоря, что объект ушел. –

+0

Что такое тип возврата f.Select()? и поля? Возможно, это можно перечислить, и вы можете перебрать его только один. Решение состоит в том, чтобы сохранить его в списке, а затем работать с этим списком;) – xszaboj

ответ

2

Когда вы выберете поле, а затем используйте TypeText, который заменяет все поле вашим текстом ввода. Вместо этого, вы должны использовать Field.Result свойство:

f.Result.Text = "some text"; 

Таким образом, ваш код должен быть что-то вроде следующего:

var wordApp = new Microsoft.Office.Interop.Word.Application(); 
var wordDoc = wordApp.Documents.Add(Path.GetFullPath("myTemplate.dotx")); 
wordDoc.Fields[1].Result.Text = "some text"; // AFAIK, `Fields` collection is one-based. 

// Do whatever other modifications you want, then save and close the document. 

Надежда, что помогает :)