【问题标题】:How to automate Microsoft word 2003 from WPF?如何从 WPF 自动化 Microsoft Word 2003?
【发布时间】:2010-01-03 07:26:23
【问题描述】:

我有一个包含一些文本字段的 WPF 窗口(使用 c# 作为代码)。
我想要的是,当用户按下打印按钮时,我想获取这些字段的信息并使用 Microsoft word 2003 模板。该模板有一些空白字段要填充来自 WPF 寡妇的这些信息。
我将如何自动化 word 来做到这一点?

【问题讨论】:

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


    【解决方案1】:

    这很简单:

    1. 添加对“Microsoft Word 11.0 对象库”的 COM 引用(或使用 Microsoft.Office.Interop.Word 程序集)。您可能需要安装 Visual Studio Tools for Office System 和/或浏览到您的主互操作程序集,具体取决于您的 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 范围。

    例如:

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

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

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

    【讨论】:

    • 很好的答案。它是在我还在编写我的时候出现的,所以我尊重你的建议,把我的编码建议拿出来,只保留了示例的链接。
    • @Ray Burns:谢谢,我有一个带有multiple Quick 部分和内容控制的模板文档,但doc.Fields.Count 中为0。如何获取documnet 中的字段?
    【解决方案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#)

    自动化示例的完整列表。

    【讨论】:

      猜你喜欢
      • 2011-12-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-10-19
      • 2010-09-21
      • 1970-01-01
      • 1970-01-01
      • 2014-07-05
      相关资源
      最近更新 更多