【发布时间】:2010-01-03 07:26:23
【问题描述】:
我有一个包含一些文本字段的 WPF 窗口(使用 c# 作为代码)。
我想要的是,当用户按下打印按钮时,我想获取这些字段的信息并使用 Microsoft word 2003 模板。该模板有一些空白字段要填充来自 WPF 寡妇的这些信息。
我将如何自动化 word 来做到这一点?
【问题讨论】:
我有一个包含一些文本字段的 WPF 窗口(使用 c# 作为代码)。
我想要的是,当用户按下打印按钮时,我想获取这些字段的信息并使用 Microsoft word 2003 模板。该模板有一些空白字段要填充来自 WPF 寡妇的这些信息。
我将如何自动化 word 来做到这一点?
【问题讨论】:
这很简单:
添加对“Microsoft Word 11.0 对象库”的 COM 引用(或使用 Microsoft.Office.Interop.Word 程序集)。您可能需要安装 Visual Studio Tools for Office System 和/或浏览到您的主互操作程序集,具体取决于您的 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 范围,然后根据文本框内容更新字段的 .Result 范围。
例如:
foreach(Field f in doc.Fields)
if(f.Code.Text.Contains("lastName"))
f.Result.Text = this.LastName;
...
这假设您的数据上下文类具有从 XAML 绑定的 DependencyProperty“LastName”,如下所示:
<TextBox Text="{Binding LastName}" />
【讨论】:
doc.Fields.Count 中为0。如何获取documnet 中的字段?
您从 WPF 窗口执行此操作无关紧要。后面的代码应该完成所有的自动化。以下是一些可以为您提供指导或示例的资源:
请注意,不建议在服务器上执行此操作。我知道您的要求是针对 Wpf,但最终可能会涉及到 Silverlight 项目。
顺便说一句:使用 COM 对象比普通的 .NET 对象要复杂一些,Office COM 对象更是如此:
注意他最初的声明:
Object oMissing = System.Reflection.Missing.Value()
Object oTrue = true;
Object oFalse = false;
这是因为所有方法参数都是'ref'参数,所以你不能传递通常的常量null、true和false。
Automation Samples Using Managed Code (Visual Basic or Visual C#)
自动化示例的完整列表。
【讨论】: