使用c#和Microsoft Word Interop填充Word中的字段

时间:2013-08-30 12:40:58

标签: c# ms-word office-interop

我尝试使用带有以下代码的C#Interop程序集填写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”(我将其转换为“以前版本的Formfields”) 如果我注释掉整个foreach Block以便我只打开并保存Document,我会得到相同的结果。

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

2 个答案:

答案 0 :(得分:13)

您应该使用:

doc = Word.Documents.Add(filename);

而不是:

doc = Word.Documents.Open(filename);

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

答案 1 :(得分:1)

使用它,它应该工作:

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();
相关问题