如何从WPF自动化Microsoft Word 2003?
我有一个WPF窗口(使用c#作为后面的代码),它有一些文本字段。
我想要的是,当用户按下打印按钮时,我想获取这些字段的信息并使用Microsoft Word 2003模板。 该模板有一些空白字段可以填充来自WPF寡妇的这些信息。
我如何自动执行此操作?
这很简单:
-
将COM引用添加到“Microsoft Word 11.0对象库”(或使用Microsoft.Office.Interop.Word程序集)。 您可能必须安装Visual Studio Tools for Office System和/或浏览到Primary Interop程序集,具体取决于您的VS.NET和Office版本以及您安装的其他内容。
-
创建Word.Application应用程序对象
var app = new Word.Application()
-
使用
var doc = app.Documents.Open(...)
打开文档。 请注意,在C#3.5或更低版本中,您必须传递所有参数。 您可以使用为大多数初始化为System.Reflection.Missing.Value的变量。 -
使用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’参数,因此您无法传递常用常量, null
, true
和false
。
使用托管代码的自动化示例(Visual Basic或Visual C#)
自动化样本的完整列表。