Заполнение полей в 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();
Другие вопросы по тегам