65.9K
CodeProject 正在变化。 阅读更多。
Home

使用 OpenXML 和 C# 编辑 Word 文档,无需自动化/互操作

starIconstarIconstarIconstarIcon
emptyStarIcon
starIcon

4.72/5 (18投票s)

2015 年 5 月 28 日

CPOL

5分钟阅读

viewsIcon

185250

downloadIcon

6693

本技巧解释了如何使用 OpenXML 和 C# 进行 Word 自动化,而无需 Word 互操作。

引言

您是否正在寻找一种方法来进行 Word 自动化?想以编程方式处理 Word 文档?阅读本技巧,它将帮助您使用 C# 和 OpenXML 进行 Word 自动化,而无需互操作。

阅读本技巧后,您将能够说出

  1. 什么是 Open XML
  2. 为什么要使用 Open XML
  3. 如何使用 OpenXML 和 C# 以及 OpenXML API 创建 Word 文档
  4. 使用 OpenXML 和 C# 创建 Word 表格

背景

我见过许多开发人员在以编程方式处理 Word 文档时遇到困难,处理 Word 文档有几种方法

  1. 使用 COM 互操作对象(Winword 实例)(有关互操作示例代码,请参阅本文
  2. 使用 OpenXML API(无需在计算机上安装 Word)

Using the Code

所需物品

在开始 OpenXML 操作之前,我们需要准备好以下物品

  1. C# Visual Studio(2005 及更高版本)
  2. OpenXML API(可在此处下载适用于 Microsoft Office 的 Open XML SDK 2.5

仅此而已。(哇!!!无需安装 Word

开始使用 OpenXML

如今,DOCX 文件越来越受欢迎,因为它们非常轻巧且处理速度快,DOCX 是 ZIP 和 XML 组合的神奇结果。因此,很明显,如果我们能够管理 XML,我们也能够管理 DOCX。要管理 WordXML,我们需要一些 API,而该 API 就是适用于 Microsoft Office 的 Open XML SDK,MSDN 说“API 简化了在包中操作 Open XML 包和底层 Open XML 架构元素任务。Open XML SDK 封装了开发人员在 Open XML 包上执行的许多常见任务,因此您只需几行代码即可执行复杂的操作。

Open XML 相对于互操作的优势

  1. Open XML 是用于文字处理文档、演示文稿和电子表格的开放标准,可以由不同平台上的多个应用程序自由实现。
  2. Open XML 标准的目的是解耦由 Microsoft Office 应用程序创建的文档,以便它们可以被其他应用程序独立于专有格式进行操作,而不会丢失数据。
  3. 由于其轻量级,处理速度比互操作对象快。
  4. 它具有良好的互操作性、向后兼容性和可编程性。
  5. 由于文件大小较小,因此可以轻松管理各种文档存储,包括 Exchange 服务器、SharePoint,当然还有网络文件存储。
  6. 它是 IS29500 标准,供所有人免费使用,并且有极其完善的文档。
您可以解压缩 DOCX 文件。

您知道您可以解压缩 DOCX 文件吗?DOCX 是几个结构良好的.XML文件的组合,Open XML 文件以 ZIP 存档形式存储用于打包和压缩。您可以使用 ZIP 查看器查看任何 Open XML 文件的结构,Open XML 文档由多个文档部件构成。部件之间的关系本身存储在文档部件中,每个典型的 DOCX 文件都有以下不同的部件。

请参见下图,了解不同的 XML 部件。

正文是文档的主要部分,它包含如图所示的许多不同部分。

处理段落(第一个作业)

段落是WordprocessingML文档中块级内容最基本单位,段落使用<p>元素存储,段落具有不同的子元素,如ParagraphProperties(可选)、RunText

段落属性

段落属性用于文本格式设置,一些段落属性的示例包括对齐、边框、连字符覆盖、缩进、行距、底纹、文本方向。OXML SDK 段落属性类代表<pPr>元素。

Run

run元素用于分隔文本区域。OXML SDK Run类代表<r>元素。

文本

此元素包含文档的实际Text。与<r>元素一起,文本(<t>)元素是构成文档内容的文本的容器。

开始编写代码(创建新 word 文档并写入内容)

打开 Visual Studio,开始第一个 OpenXML 作业。

创建新项目/应用程序并添加 DLL 引用(DLL 应存在于已安装的 OpenXML API 文件夹中,例如,C:\Program Files\Open XML SDK\V2.0\lib)。

1. DocumentFormat.OpenXml

请参见下面的代码片段,我们使用 OpenXML 来创建新的 Word 文档。

     using (WordprocessingDocument doc = WordprocessingDocument.Create
     ("D:\\test11.docx", DocumentFormat.OpenXml.WordprocessingDocumentType.Document))
            {
                // Add a main document part. 
                MainDocumentPart mainPart = doc.AddMainDocumentPart();

                // Create the document structure and add some text.
                mainPart.Document = new Document();
                Body body = mainPart.Document.AppendChild(new Body());
                Paragraph para = body.AppendChild(new Paragraph());
                Run run = para.AppendChild(new Run());

                // String msg contains the text, "Hello, Word!"
                run.AppendChild(new Text("New text in document"));
            }

在上面的简单代码片段中

  • 我们使用了'WordProcessingDocument' 类来创建新文档。
  • 向文档添加MainDocumentPart
  • 然后将Body 添加到主文档部分。
  • 然后将Paragraph 添加到Body 元素。
  • 然后将Run 添加到Paragraph 元素。
  • 然后将Text 添加到Run 元素。

就是这样。无需再保存文档了。

现在,如果您查看“test11.docx”,您会发现它包含文本“New text in document”。

现在尝试解压缩该 Docx 文件,您将获得以下文件夹结构,您会看到 _relsdocsPropsword 文件夹以及 [Content_Types].xml 文件。

打开 Word 文件夹并检查 document.xml。您将看到以下快照。

在上图中,您可以看到<w:body>代表文档的MainBody <w:p>是段落元素,<w:r>run 元素,<w:t>text 元素。

这就是 OpenXML 的工作原理。

关注点

OpenXML 确实是一项了不起的技术,它能够流畅地处理电子表格、图表、演示文稿和文字处理文档。Open XML 文件格式对开发人员很有用,因为它们采用了开放标准,并且基于众所周知的技术:ZIP 和 XML。

参考文献和事实书

以下是 OpenXML 的参考链接:

谢谢

OpenXML 并非一蹴而就,我将在本文章的下一版本中继续介绍另一个关于 OpenXML 的作业。在那之前,请享受这些内容。随时欢迎您的建议和疑问。

© . All rights reserved.