Заполнение полей в Word с помощью С# и Microsoft Word Interop
Я попытался заполнить поля формы в Microsoft Word с помощью С# Interop Assemblies со следующим кодом
string filename = @"N:\mehler\Vorlage2.dotx";
Microsoft.Office.Interop.Word.Application word = new Microsoft.Office.Interop.Word.Application();
Microsoft.Office.Interop.Word.Document doc = new Microsoft.Office.Interop.Word.Document();
doc = word.Documents.Open(filename);
doc.Activate();
foreach (Microsoft.Office.Interop.Word.FormField field in doc.FormFields)
{
switch (field.Name)
{
case "Text2":
field.Range.Text = "1";
break;
default:
break;
}
}
doc.SaveAs2(@"N:\mehler\Ausgefuellt.docx");
doc.Close();
word.Quit();
System.Diagnostics.Process.Start(@"N:\mehler\Ausgefuellt.docx");
Microsoft Word не может открыть файл Ausgefuellt.docx и показывает сообщение о том, что произошла неизвестная ошибка.
Я создал простой Word-документ с небольшим количеством неформатированного текста и 2 текстовых форм-полей
может кто-нибудь сказать мне, что пошло не так, или если у меня ошибка в исходном коде
Изменить:
Мне удалось указать проблему. Я создал документ, содержащий только одно текстовое поле.
В Word 2013 это найдено в теме "Formulare aus Vorversionen" (я бы перевел это на "Formfields from прежние версии" )
Если я прокомментирую весь блок foreach, чтобы открыть и сохранить документ, я получаю тот же результат.
Если я открываю исходный файл непосредственно в Word, это не проблема. Я также попытался загрузить документ и сделать Word Visible. Результат выглядел как пустой экземпляр Word без загрузки документа.
Ответы
Ответ 1
Вы должны использовать:
doc = Word.Documents.Add(filename);
Вместо:
doc = Word.Documents.Open(filename);
Итак, Word будет использовать шаблон для создания файла документа, а не сам шаблон.
Кажется, что Word ведет себя по-другому, когда активный документ является Шаблоном.
Ответ 2
Используйте это, он должен работать:
Word.Application WordApp;
Word.Document WordDoc;
object misValue = System.Reflection.Missing.Value;
WordApp = new Word.ApplicationClass();
WordDoc = WordApp.Documents.Open(filePath2, misValue, misValue, misValue, misValue, misValue,
misValue, misValue, misValue, misValue, misValue, misValue, misValue, misValue, misValue);
WordDoc.Activate();