从包中移除文档部件
本主题演示如何使用 Open XML SDK for Office 中的类以编程方式从 Wordprocessing 文档中删除文档部件 (文件) 。
包和文档部件
Open XML 文档存储为包,其格式由 ISO/IEC 29500 定义。 包可以具有多个彼此之间存在关系的部件。 部件之间的关系控制文档的类别。 如果文档的包关系项包含与主文档部件的关系,可将文档定义为字处理文档。 如果文档的包关系项包含与演示文稿部件的关系,可将文档定义为演示文稿文档。 如果文档的包关系项包含与工作簿部件的关系,可将文档定义为电子表格文档。 在本操作方法主题中,您将使用字处理文档包。
获取 WordprocessingDocument 对象
代码示例首先打开包文件,方法是将文件名作为参数传递给 采用字符串的 重载 Open 方法 WordprocessingDocument 之一,以及指定是否应在读/写模式下打开文件的布尔值。 在这种情况下,布尔值 true
指定应在读/写模式下打开文件。
using (WordprocessingDocument wordDoc = WordprocessingDocument.Open(document, true))
在 v3.0.0+ 中, Close() 已删除 方法,转而依赖于 using 语句。
它确保在 Dispose() 到达右大括号时自动调用 方法。 using 语句后面的块为 using 语句中创建或指定的对象设定范围。
WordprocessingDocument由于 Open XML SDK 中的 类会自动保存并关闭对象作为其IDisposable实现的一using
部分,并且由于Dispose()在退出块时会自动调用,因此无需显式调用 Save() 或 Dispose() ,只要使用 语句。
WordProcessingML 文档的结构
文档的基本文档结构WordProcessingML
由 和 body
元素组成document
,后跟一个或多个块级元素(例如 p
表示段落)。 段落包含一个或多个 r
元素。
r
代表 run,它是具有一组通用属性(如格式设置)的文本区域。 运行包含一个或多个 t
元素。 元素 t
包含文本范围。 下面的代码示例演示 WordprocessingML
包含文本“示例文本”的文档的标记。
<w:document xmlns:w="http://schemas.openxmlformats.org/wordprocessingml/2006/main">
<w:body>
<w:p>
<w:r>
<w:t>Example text.</w:t>
</w:r>
</w:p>
</w:body>
</w:document>
使用 Open XML SDK,可以使用与元素对应的 WordprocessingML
强类型类创建文档结构和内容。 可以在 命名空间中找到 这些类。 下表列出了对应于 、、body
、 r
p
和 t
元素的类的document
类名。
WordprocessingML 元素 | Open XML SDK 类 | 说明 |
---|---|---|
<document/> |
Document | 主文档部件的根元素。 |
<body/> |
Body | 块级结构(如段落、表格、批注和 ISO/IEC 29500 规范中指定的其他项)的容器。 |
<p/> |
Paragraph | 段落。 |
<r/> |
Run | 一段连续文本。 |
<t/> |
Text | 文本范围。 |
有关 WordprocessingML 文档的各个部分和元素的整体结构的详细信息,请参阅 WordprocessingML 文档的结构。
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/IEC 29500:2016
示例代码的工作方式
打开文档后,在 语句中 using
,作为 WordprocessingDocument 对象创建对部件的 DocumentSettingsPart
引用。
然后可以检查该部件是否存在,如果存在,则从包中删除该部件。 在此实例中,部件 settings.xml
将从包中删除。
MainDocumentPart? mainPart = wordDoc.MainDocumentPart;
if (mainPart is not null && mainPart.DocumentSettingsPart is not null)
{
mainPart.DeletePart(mainPart.DocumentSettingsPart);
}
示例代码
以下是使用 C# 和 Visual Basic 编写的完整示例代码。
// To remove a document part from a package.
static void RemovePart(string document)
{
using (WordprocessingDocument wordDoc = WordprocessingDocument.Open(document, true))
{
MainDocumentPart? mainPart = wordDoc.MainDocumentPart;
if (mainPart is not null && mainPart.DocumentSettingsPart is not null)
{
mainPart.DeletePart(mainPart.DocumentSettingsPart);
}
}
}