12

我尝试使用 C# Interop Assemblies 和以下代码在 Microsoft Word 中填写表单字段

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 个 Text-Form-Fields

谁能告诉我,出了什么问题,或者我的源代码中是否有错误

编辑:我设法指定了问题。我创建了一个仅包含一个文本表单字段的文档。在 Word 2013 中,这可以在主题“Formulare aus Vorversionen”下找到(我会将其翻译为“以前版本的表单字段”)如果我注释掉整个 foreach 块以便我只打开并保存文档,我会得到相同的结果结果。

如果我直接在 Word 中打开源文件,那是没有问题的。我还尝试加载文档并使 Word 可见。结果看起来像一个没有加载文档的空 Word 实例。

4

2 回答 2

15

你应该使用:

doc = Word.Documents.Add(filename);

代替:

doc = Word.Documents.Open(filename);

所以 Word 将使用模板创建文档文件,而不是打开模板本身。当活动文档是模板时,Word 的行为似乎有所不同。

于 2013-09-02T11:46:15.413 回答
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();
于 2013-09-04T06:49:43.857 回答