您的位置:首页 > Web前端 > CSS

使用 Open XML SDK 2.0 从 Word 2010 文档中提取样式

2014-04-22 10:35 543 查看
http://msdn.microsoft.com/zh-cn/library/gg615380(v=office.14).aspx



虽然可利用 Open XML 文件格式检索 Microsoft Word 文档中的内容快,但执行此操作需要做一些工作。Open XML SDK 2.0 添加了将简化对 Open XML 文件格式的访问的强类型类:SDK 将简化检索任务,例如,检索包含文档样式或 stylesWithEffects 部分的 XDocument 实例。在给定
XML 内容的情况下,您可以对信息进行存档、修改并重新应用信息或将信息应用于新文档。此直观操作方法附带的代码示例将介绍如何使用 SDK 检索样式或 stylesWithEffects 部分 - 该代码示例中并未介绍如何将样式应用于新文档。



此直观操作方法附带的示例将包含检索 Word 2007 或 Word 2010 文档的样式或 stylesWithEffects 部分的 XDocument 实例所需的代码。以下各节详细介绍了该代码。请注意,在
Word 2007 中创建的文档只有一个 styles 部分;Word 2010 添加了第二个 stylesWithEffects 部分。为了使文档能够在 Word 2010 和 Word 2007 之间来回转换,Word 2010 保留了原始 styles 部分和新 styles 部分。Open XML 规范需要 Microsoft Word 忽略它无法识别的部分;Word 2007 无法识别由 Word 2010 添加到文档的 stylesWithEffects 部分。应用程序必须对检索样式或 stylesWithEffects
部分所获得的结果进行解释。
设置引用
若要使用 Open XML SDK 2.0 中的代码,您必须向您的项目添加几个引用。虽然示例项目已包含这些引用,但您需要在您的代码中显式引用以下程序集:

WindowsBase - 可以根据您创建的项目的类型为您设置此引用。

DocumentFormat.OpenXml - 由 Open XML SDK 2.0 安装。

您还应将下面的 using/Imports 语句添加到代码文件的顶部。

C#

VB

using System;
using System.IO;
using System.Xml;
using System.Xml.Linq;
using DocumentFormat.OpenXml.Packaging;


检查过程
WDExtractStyles 过程接受两个参数:第一个参数包含一个指示要修改的文件路径的字符串,第二个参数指示是要检索 styles 部分还是更新的 stylesWithEffects
部分(实际上,您需要对 Word 2010 文档调用此过程两次,以便检索这两个部分)。此过程将返回一个 XDocument 实例,该实例包含您请求的完整
styles 或 stylesWithEffects 部分以及文档的所有样式信息(或一个空引用,如果您情况的部分不存在)。

C#

VB

Public static XDocument WDExtractStyles(
string fileName,
bool getStylesWithEffectsPart = true)


此过程将检查您指定的文档,并查找指定的 styles 或 stylesWithEffects 部分。如果该部分存在,则此过程会将其作为 XDocument 实例返回。若要调用此过程,请传递参数值,如示例代码中所示。在您运行示例代码之前,请务必提供一个名为
C:\temp\StylesFrom.docx 的文档,该文档(用于演示)包含一些示例已修改的样式。

C#

VB

var styles = WDExtractStyles(@"C:\temp\StylesFrom.docx", true);
if (styles != null)
Console.WriteLine(styles.ToString());


访问文档
该代码首先会创建一个名为
styles
的变量,此过程在退出之前将返回该变量。

C#

VB

XDocument styles = null;
// Code removed here…
return styles;


接下来,该代码将使用 WordprocessingDocument.Open 方法打开文档,并指示应打开此文档以供只读访问(最后的
false
参数)。在打开文档的情况下,该代码将使用 MainDocumentPart 属性导航到主文档,然后准备一个名为
stylesPart
的变量来保存对
styles 部分的引用。

C#

VB

using (var document = WordprocessingDocument.Open(fileName, false))
{
var docPart = document.MainDocumentPart;

var stylesPart = null;
// Code removed here…
}


查找正确的 Styles 部分
接下来,该代码将使用 setStylesWithEffectsPart 布尔参数来检索对请求的 styles 部分的引用。然后,该代码将基于此值检索 docPart 变量的特定属性,并将其存储在
stylesPart
变量中。

C#

VB

if (getStylesWithEffectsPart)
stylesPart = docPart.StylesWithEffectsPart;
else
stylesPart = docPart.StyleDefinitionsPart;


检索部分内容
如果请求的 styles 部分存在,则该代码必须该部分在 XDocument 实例中的完整内容。每个部分均提供一个用于返回 StreamGetStream 方法。该代码会将Stream 实例传递给 XmlNodeReader.Create 方法,然后调用 XDocument.Load 方法,并将 XmlNodeReader 作为参数传递。在使用
XDocuments 和 Open XML 部分时,此系列步骤很常见。您会发现它们很常用。

C#

VB

if (stylesPart != null)
{
using (var reader = XmlNodeReader.Create(
stylesPart.GetStream(FileMode.Open, FileAccess.Read)))
{
// Create the XDocument:
styles = XDocument.Load(reader);
}
}


示例过程
下面的代码示例包含完整的示例过程。

C#

VB

public static XDocument WDExtractStyles(
string fileName,
bool getStylesWithEffectsPart = true)
{
XDocument styles = null;

using (var document = WordprocessingDocument.Open(fileName, false))
{
var docPart = document.MainDocumentPart;

StylesPart stylesPart = null;
if (getStylesWithEffectsPart) stylesPart = docPart.StylesWithEffectsPart; else stylesPart = docPart.StyleDefinitionsPart;
if (stylesPart != null) { using (var reader = XmlNodeReader.Create( stylesPart.GetStream(FileMode.Open, FileAccess.Read))) { // Create the XDocument: styles = XDocument.Load(reader); } }}
return styles;
}




此直观操作方法附带的示例演示了将检索 Word 文档中的 styles 或 stylesWithEffects 部分的代码。若要使用该示例,请安装 Open XML SDK 2.0(可通过“浏览”一节中列出的链接获得)。该示例还将使用作为 Open XML SDK 2.0 代码段集的一部分包含的修改后的代码。“浏览”一节还包括指向完整代码段集的链接,但您无需下载并安装代码段即可使用该示例。
示例应用程序仅演示了在修改文档结构时可与之交互的由 Open XML SDK 2.0 提供的几个可用属性和方法。有关详细信息,请查看 Open XML SDK 2.0 Productivity Tool 附带的文档:单击应用程序窗口左下角的“Open XML SDK 文档”选项卡,搜索要研究的类。尽管文档并不总是包含代码示例,但借助此处所示的示例和文档,您应能够成功修改示例应用程序。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: