如何从WPF自动化Microsoft Word 2003?

时间:2010-01-03 07:26:24

标签: c# wpf ms-word ms-office

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

2 个答案:

答案 0 :(得分:4)

这很简单:

  1. 将COM引用添加到“Microsoft Word 11.0对象库”(或使用Microsoft.Office.Interop.Word程序集)。您可能必须安装Visual Studio Tools for Office System和/或浏览到主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范围,然后根据文本框内容更新字段的.Result范围。

  5. 例如:

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

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

    <TextBox Text="{Binding LastName}" />
    

答案 1 :(得分:2)

从WPF窗口执行此操作并不重要。后面的代码应该完成所有自动化。以下是一些可以为您提供指导或示例的资源:

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

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

<强> Word Automation using C#

请注意他的初步声明:

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

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

Automation Samples Using Managed Code (Visual Basic or Visual C#)

自动化样本的完整列表。

相关问题