如何从WPF自动化Microsoft Word 2003?

我有一个WPF窗口(使用c#作为后面的代码),它有一些文本字段。
我想要的是,当用户按下打印按钮时,我想获取这些字段的信息并使用Microsoft Word 2003模板。 该模板有一些空白字段可以填充来自WPF寡妇的这些信息。
我如何自动执行此操作?

这很简单:

  1. 将COM引用添加到“Microsoft Word 11.0对象库”(或使用Microsoft.Office.Interop.Word程序集)。 您可能必须安装Visual Studio Tools for Office System和/或浏览到Primary Interop程序集,具体取决于您的VS.NET和Office版本以及您安装的其他内容。

  2. 创建Word.Application应用程序对象var app = new Word.Application()

  3. 使用var doc = app.Documents.Open(...)打开文档。 请注意,在C#3.5或更低版本中,您必须传递所有参数。 您可以使用为大多数初始化为System.Reflection.Missing.Value的变量。

  4. 使用foreach迭代doc.Fields:读取并解析字段的.Code范围,然后根据文本框内容更新字段的.Code范围。

例如:

 foreach(Field f in doc.Fields) if(f.Code.Text.Contains("lastName")) f.Result.Text = this.LastName; ... 

这假设您的数据上下文类具有从XAML绑定的DependencyProperty“LastName”,如下所示:

  

你从WPF窗口这样做是无关紧要的。 后面的代码应该完成所有的自动化。 以下是一些可以帮助您获得指导或示例的资源:

请注意,建议不要在服务器上执行此操作。 我知道您的要求是针对Wpf,但最终可能会涉及到Silverlight项目。

顺便说一句:使用COM对象比普通的.NET对象有点棘手,Office COM对象更是如此:

使用C#进行Word自动化

请注意他的初步声明:

 Object oMissing = System.Reflection.Missing.Value() Object oTrue = true; Object oFalse = false; 

这是因为所有方法参数都是’ref’参数,因此您无法传递常用常量, nulltruefalse

使用托管代码的自动化示例(Visual Basic或Visual C#)

自动化样本的完整列表。