Заполнение полей в Word с помощью C# и Microsoft Word Interop
Я попытался заполнить поля формы в Microsoft Word, используя сборки взаимодействия C# со следующим кодом
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 с небольшим количеством неформатированного текста и двумя полями Text-Form-Fields.
может кто-нибудь сказать мне, что пошло не так или, если у меня есть ошибка в моем исходном коде
Изменить: мне удалось указать проблему. Я создал документ, содержащий только одно текстовое поле. В Word 2013 это можно найти в разделе "Formulare aus Vorversionen" (я бы перевел это в "Поля форм из предыдущих версий"). Если я закомментирую весь блок foreach, чтобы я только открывал и сохранял документ, я получал то же самое. результат.
Если я открою исходный файл прямо в Word, это не проблема. Я также попытался загрузить документ и сделать Word Visible. Результат выглядел как пустой экземпляр Word без загруженного документа.
2 ответа
Вы должны использовать:
doc = Word.Documents.Add(filename);
Вместо:
doc = Word.Documents.Open(filename);
Поэтому Word будет использовать шаблон для создания файла документа, а не открывать сам шаблон. Кажется, что Word ведет себя по-разному, когда активный документ является шаблоном.
Используйте это, оно должно работать:
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();