Заполнение полей в 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();