如何:从包中移除文档部件
上次修改时间: 2010年10月14日
适用范围: Excel 2010 | Office 2010 | PowerPoint 2010 | Word 2010
本文内容
包和文档部件
获取 WordprocessingDocument 对象
WordProcessingML 文档的基本结构
Settings 元素
示例代码的工作方式
示例代码
本主题演示如何使用 Open XML SDK 2.0 for Microsoft Office 中的类以编程方式从 Wordprocessing 文档中移除文档部件(文件)。
编译本主题中的代码需要使用以下程序集指令。
using System;
using DocumentFormat.OpenXml.Packaging;
Imports System
Imports DocumentFormat.OpenXml.Packaging
包和文档部件
Open XML 文档以包的形式存储,其格式由 ISO/IEC 29500-2(该链接可能指向英文页面) 定义。包可以具有多个彼此之间存在关系的部件。部件之间的关系控制文档的类别。如果文档的包关系项包含与主文档部件的关系,可将文档定义为字处理文档。如果文档的包关系项包含与演示文稿部件的关系,可将文档定义为演示文稿文档。如果文档的包关系项包含与工作簿部件的关系,可将文档定义为电子表格文档。在本操作方法主题中,您将使用字处理文档包。
获取 WordprocessingDocument 对象
代码示例首先通过将文件名作为参数传递到 DocumentFormat.OpenXml.Packaging.WordprocessingDocument 的重载的 Open() 方法之一来打开包文件,该方法采用字符串和指定是否应该以读/写模式打开文件的布尔值。在此示例中,布尔值为 true,指定应以读/写模式打开文件。
// Open a Wordprocessing document for editing.
using (WordprocessingDocument wordDoc = WordprocessingDocument.Open(document, true))
{
// Insert other code here.
}
' Open a Wordprocessing document for editing.
Using wordDoc As WordprocessingDocument = WordprocessingDocument.Open(document, True)
' Insert other code here.
End Using
using 语句提供典型 .Create, .Save, .Close 序列的建议备选序列。它确保在遇到右大括号时会自动调用 Dispose 方法(Open XML SDK 用来清理资源的内部方法)。using 语句后面的块为 using 语句中创建或指定的对象设定范围,在此示例中这个范围就是 wordDoc。由于 Open XML SDK 中的 WordprocessingDocument 类会在实现其 System.IDisposable 的过程中自动保存和关闭对象,并且由于在您退出块时会自动调用 Dispose 方法,因此只要您使用 using,就不必明确调用 Save 和 Close。
WordProcessingML 文档的基本结构
WordProcessingML 文档的基本文档结构由 document 和 body 元素组成,后跟一个或多个块级元素,如表示段落的 p。一个段落包含一个或多个 r 元素。r 代表一段连续文本,它是具有一组共同属性(如格式设置)的文本区域。一段连续文本包含一个或多个 t 元素。t 元素包含一个文本区域。以下代码示例中显示示例代码创建的文档的 WordprocessingML 标记。
<w:document xmlns:w="https://schemas.openxmlformats.org/wordprocessingml/2006/main">
<w:body>
<w:p>
<w:r>
<w:t>Create text in body - CreateWordprocessingDocument</w:t>
</w:r>
</w:p>
</w:body>
</w:document>
通过使用 Open XML SDK 2.0,您可以利用 WordprocessingML 元素所对应的强类型类创建文档结构和内容。可以在 DocumentFormat.OpenXml.Wordprocessing 命名空间中找到这些类。下表列出了 document、body、p、r 和 t 元素所对应类的类名称。
WordprocessingML 元素 |
Open XML SDK 2.0 类 |
说明 |
---|---|---|
document |
主文档部件的根元素。 |
|
body |
块级结构(如段落、表格、批注和 ISO/IEC 29500(该链接可能指向英文页面) 规范中指定的其他项)的容器。 |
|
p |
一个段落。 |
|
r |
一段连续文本。 |
|
t |
一个文本范围。 |
Settings 元素
ISO/IEC 29500(该链接可能指向英文页面) 规范中的以下文本介绍了 PresentationML 包中的 settings 元素。
此元素指定应用于 WordprocessingML 文档的设置。此元素是 WordprocessingML 文档中的文档设置部件的根元素。[示例:考虑以下 WordprocessingML 片段,它表示文档的设置部件:
<w:settings>
<w:defaultTabStop w:val="720" />
<w:characterSpacingControl w:val="dontCompress" />
</w:settings>
settings 元素包含此文档的所有设置。在此示例中,应用的两项设置是自动制表位递增量为 0.5"(使用 defaultTabStop 元素)和无字符级空白压缩(使用 characterSpacingControl 元素)。示例结束]
© ISO/IEC29500: 2008。
示例代码的工作方式
在 using 语句中将文档作为 WordprocessingDocument 对象打开后,创建对 DocumentSettingsPart 部件的引用。然后可以检查该部件是否存在,如果存在,则从包中删除该部件。在此示例中,从包中移除 settings.xml 部件。
MainDocumentPart mainPart = wordDoc.MainDocumentPart;
if (mainPart.DocumentSettingsPart != null)
{
mainPart.DeletePart(mainPart.DocumentSettingsPart);
}
Dim mainPart As MainDocumentPart = wordDoc.MainDocumentPart
If mainPart.DocumentSettingsPart IsNot Nothing Then
mainPart.DeletePart(mainPart.DocumentSettingsPart)
End If
示例代码
以下代码从包中移除一个文档部件。若要运行程序,请调用 RemovePart 方法,如此示例所示。
string document = @"C:\Users\Public\Documents\MyPkg6.docx";
RemovePart(document);
Dim document As String = "C:\Users\Public\Documents\MyPkg6.docx"
RemovePart(document)
备注
对测试文件(例如"MyPkg6.docs")运行程序之前,请使用 Open XML SDK 2.0 Productivity Tool for Microsoft Office 打开文件并检查它的结构。运行程序后,再次检查该文件,您将发现 DocumentSettingsPart 部件已移除。
以下是使用 C# 和 Visual Basic 编写的完整示例代码。
// To remove a document part from a package.
public static void RemovePart(string document)
{
using (WordprocessingDocument wordDoc = WordprocessingDocument.Open(document, true))
{
MainDocumentPart mainPart = wordDoc.MainDocumentPart;
if (mainPart.DocumentSettingsPart != null)
{
mainPart.DeletePart(mainPart.DocumentSettingsPart);
}
}
}
' To remove a document part from a package.
Public Sub RemovePart(ByVal document As String)
Dim wordDoc As WordprocessingDocument = WordprocessingDocument.Open(document, true)
Dim mainPart As MainDocumentPart = wordDoc.MainDocumentPart
If (Not (mainPart.DocumentSettingsPart) Is Nothing) Then
mainPart.DeletePart(mainPart.DocumentSettingsPart)
End If
End Sub