我尝试使用带有以下代码的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实例。
答案 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();