创建包

本主题演示如何使用 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 强类型类创建文档结构和内容。 可以在 命名空间中找到 这些类。 下表列出了对应于 、、bodyrpt 元素的类的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);
    }
}

另请参阅