创建包
本主题演示如何使用 Open XML SDK for Office 中的类以编程方式从 XML 标记形式的 WordprocessingML
内容创建字处理文档包。
包和文档部件
Open XML 文档存储为包,其格式由 ISO/IEC 29500 定义。 包可以具有多个彼此之间存在关系的部件。 部件之间的关系控制文档的类别。 如果文档的包关系项包含与主文档部件的关系,可将文档定义为字处理文档。 如果文档的包关系项包含与演示文稿部件的关系,可将文档定义为演示文稿文档。 如果文档的包关系项包含与工作簿部件的关系,可将文档定义为电子表格文档。 在本操作方法主题中,您将使用字处理文档包。
获取 WordprocessingDocument 对象
在 Open XML SDK 中WordprocessingDocument, 类表示Word文档包。 若要创建Word文档,请创建 类的WordprocessingDocument实例并用部件填充它。 该文档至少必须具有一个充当文档主文本的容器的主文档部件。 文本在包中使用标记表示为 XML WordprocessingML
。
若要创建类实例,请调用 Create(String, WordprocessingDocumentType)。 提供了多种 Create 方法,每个方法都有不同的签名。 第一个参数接受一个完整的路径字符串,它表示你想要创建的文档。 第二个参数是 枚举的成员 WordprocessingDocumentType 。 此参数表示文档的类型。 例如,每个文档、模板以及启用了各种文档和模板的宏都有不同的枚举成员 WordprocessingDocumentType 。
注意
请仔细选择适当的 WordprocessingDocumentType ,并验证保存的文件是否具有正确匹配的文件扩展名。 WordprocessingDocumentType如果 与文件扩展名不匹配,则当您在 Microsoft Word 中打开文件时会出现错误。
using (WordprocessingDocument wordDoc = WordprocessingDocument.Create(document, WordprocessingDocumentType.Document))
在 v3.0.0+ 中, Close() 已删除 方法,转而依赖于 using 语句。
它确保在 Dispose() 到达右大括号时自动调用 方法。 using 语句后面的块为 using 语句中创建或指定的对象设定范围。
WordprocessingDocument由于 Open XML SDK 中的 类会自动保存并关闭对象作为其IDisposable实现的一using
部分,并且由于Dispose()在退出块时会自动调用,因此无需显式调用 Save() 或 Dispose() ,只要使用 语句。
在创建了 Word 文档包后,您即可向其中添加部件。 若要添加main文档部件,请调用 AddMainDocumentPart。 执行此操作后,您可以开始添加文档结构和文本。
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 文档的结构。
示例代码
下面是完整的代码示例,可用于以标记形式 WordprocessingML
从 XML 内容创建 Open XML 字处理文档包。
运行程序后,打开创建的文件并检查其内容;它应该是包含短语“Hello世界!”
以下是使用 C# 和 Visual Basic 编写的完整示例代码。
// To create a new package as a Word document.
static void CreateNewWordDocument(string document)
{
using (WordprocessingDocument wordDoc = WordprocessingDocument.Create(document, WordprocessingDocumentType.Document))
{
// Set the content of the document so that Word can open it.
MainDocumentPart mainPart = wordDoc.AddMainDocumentPart();
SetMainDocumentContent(mainPart);
}
}
// Set the content of MainDocumentPart.
static void SetMainDocumentContent(MainDocumentPart part)
{
const string docXml = @"<?xml version=""1.0"" encoding=""utf-8""?>
<w:document xmlns:w=""http://schemas.openxmlformats.org/wordprocessingml/2006/main"">
<w:body>
<w:p>
<w:r>
<w:t>Hello World</w:t>
</w:r>
</w:p>
</w:body>
</w:document>";
using (Stream stream = part.GetStream())
{
byte[] buf = (new UTF8Encoding()).GetBytes(docXml);
stream.Write(buf, 0, buf.Length);
}
}