SpreadsheetML 文档的结构

上次修改时间: 2010年10月8日

适用范围: Excel 2010 | Office 2010 | PowerPoint 2010 | Word 2010

本文内容
重要电子表格部分
最小工作簿方案
典型工作簿方案

SpreadsheetML 文档的文档结构包括 <workbook> 元素,后者包含引用工作簿中的工作表的 <sheets> 和 <sheet> 元素。将为每张工作表创建单独的 XML 文件。这些元素是有效电子表格文档所需的最小元素。此外,电子表格文档可能包含 <table>、<chartsheet>、<pivotTableDefinition> 或其他与电子表格相关的元素。

本节内容

重要电子表格部分

最小工作簿方案

典型工作簿方案

重要电子表格部分

通过使用 Open XML SDK 2.0,可以使用 SpreadsheetML 元素所对应的强类型类创建文档结构和内容。可以在 DocumentFormat.OpenXML.Spreadsheet 命名空间中找到这些类。下表列出了一些重要电子表格元素所对应类的类名称。

包部分

顶级 SpreadsheetML 元素

Open XML SDK 2.0 类

说明

工作簿

workbook

Workbook

主文档部件的根元素。

工作表

worksheet

Worksheet

表示包含文本、数字、日期或公式的单元格网格的工作表类型。有关详细信息,请参阅使用工作表

图表工作表

chartsheet

Chartsheet

表示存储为自己的工作表的图表的工作表。有关详细信息,请参阅使用工作表

table

Table

指定属于单个数据集的一系列数据的逻辑构造。有关详细信息,请参阅使用表格 (SpreadsheetML)

数据透视表

pivotTableDefinition

PivotTableDefinition

显示可理解布局中数据的聚合视图的逻辑构造。有关详细信息,请参阅使用数据透视表

透视缓存

pivotCacheDefinition

PivotCacheDefinition

定义数据透视表中的数据源的构造。有关详细信息,请参阅使用数据透视表

透视缓存记录

pivotCacheRecords

PivotCacheRecords

数据透视表的源数据的缓存。有关详细信息,请参阅使用数据透视表

计算链

calcChain

CalculationChain

指定上次计算工作簿中单元格的顺序的构造。有关详细信息,请参阅使用计算链

共享字符串表

sst

SharedStringTable

包含每个唯一字符串在工作簿中的所有工作表上的出现次数的构造。有关详细信息,请参阅使用共享字符串表

条件格式

conditionalFormatting

ConditionalFormatting

定义应用于一个单元格或一系列单元格的格式的构造。有关详细信息,请参阅使用条件格式

公式

f

CellFormula

定义包含公式的单元格的公式文本的构造。有关详细信息,请参阅使用公式

最小工作簿方案

来自标准 ECMA-376(该链接可能指向英文页面) 的以下文本介绍最小工作簿方案。

可能的最小(空白)工作簿必须包含以下内容:

    一个工作表

    工作表 ID

    指向工作表定义的位置的关系 Id

© Ecma International:2006 年 12 月。

Open XML SDK 代码示例

此代码示例使用 Open XML SDK 2.0 for Microsoft Office 中的类来创建最小空白工作簿。

public static void CreateSpreadsheetWorkbook(string filepath)
{
    // Create a spreadsheet document by supplying the filepath.
    // By default, AutoSave = true, Editable = true, and Type = xlsx.
    SpreadsheetDocument spreadsheetDocument = SpreadsheetDocument.Create(filepath, SpreadsheetDocumentType.Workbook);

    // Add a WorkbookPart to the document.
    WorkbookPart workbookpart = spreadsheetDocument.AddWorkbookPart();
    workbookpart.Workbook = new Workbook();

    // Add a WorksheetPart to the WorkbookPart.
    WorksheetPart worksheetPart = workbookpart.AddNewPart<WorksheetPart>();
    worksheetPart.Worksheet = new Worksheet(new SheetData());

    // Add Sheets to the Workbook.
    Sheets sheets = spreadsheetDocument.WorkbookPart.Workbook.AppendChild<Sheets>(new Sheets());

    // Append a new worksheet and associate it with the workbook.
    Sheet sheet = new Sheet() { Id = spreadsheetDocument.WorkbookPart.GetIdOfPart(worksheetPart), SheetId = 1, Name = "mySheet" };
    sheets.Append(sheet);

    workbookpart.Workbook.Save();

    // Close the document.
    spreadsheetDocument.Close();
}
Public Sub CreateSpreadsheetWorkbook(ByVal filepath As String)
    ' Create a spreadsheet document by supplying the filepath.
    ' By default, AutoSave = true, Editable = true, and Type = xlsx.
    Dim spreadsheetDocument As SpreadsheetDocument = spreadsheetDocument.Create(filepath, SpreadsheetDocumentType.Workbook)

    ' Add a WorkbookPart to the document.
    Dim workbookpart As WorkbookPart = spreadsheetDocument.AddWorkbookPart
    workbookpart.Workbook = New Workbook

    ' Add a WorksheetPart to the WorkbookPart.
    Dim worksheetPart As WorksheetPart = workbookpart.AddNewPart(Of WorksheetPart)()
    worksheetPart.Worksheet = New Worksheet(New SheetData())

    ' Add Sheets to the Workbook.
    Dim sheets As Sheets = spreadsheetDocument.WorkbookPart.Workbook.AppendChild(Of Sheets)(New Sheets())

    ' Append a new worksheet and associate it with the workbook.
    Dim sheet As Sheet = New Sheet
    sheet.Id = spreadsheetDocument.WorkbookPart.GetIdOfPart(worksheetPart)
    sheet.SheetId = 1
    sheet.Name = "mySheet"

    sheets.Append(sheet)

    workbookpart.Workbook.Save()

    ' Close the document.
    spreadsheetDocument.Close()
End Sub

生成的 SpreadsheetML

运行 Open XML SDK 2.0 代码生成最小工作簿后,可浏览 .zip 包的内容以查看 SpreadsheetML XML 代码。若要查看 .zip 包,请将最小电子表格的扩展名从 .xlsx 重命名为 .zip。在 .zip 包中,有几个组成最小工作簿的部分。

下图显示最小工作簿的 .zip 包的 xl 文件夹下的结构。

图 1. .zip 文件夹结构

最小工作簿的结构

workbook.xml 文件包含引用工作簿中的工作表的 <sheet> 元素。每个工作表都通过工作表 ID 和关系 ID 与工作簿相关联。sheetID 是包中用于标识工作表的 ID,在工作簿中必须是唯一的。id 是标识与工作表关联的工作表部分定义的关系 ID。

以下 XML 代码是表示电子表格文档的工作簿部分的 spreadsheetML。运行 Open XML SDK 2.0 代码以创建最小工作簿时,会生成此代码。

<?xml version="1.0" encoding="utf-8"?>
<x:workbook xmlns:x="https://schemas.openxmlformats.org/spreadsheetml/2006/main">
    <x:sheets>
        <x:sheet name="mySheet" sheetId="1" r:id="Rddc7711f116045e5" xmlns:r="https://schemas.openxmlformats.org/officeDocument/2006/relationships" />
    </x:sheets>
</x:workbook>

workbook.xml.rels 文件包含定义工作簿及其包含的工作表之间的关系的 <Relationship> 元素。

以下 XML 代码是表示电子表格文档的关系部分的 spreadsheetML。运行 Open XML SDK 2.0 以创建最小工作簿时,会生成此代码。

<?xml version="1.0" encoding="utf-8"?>
<Relationships xmlns="https://schemas.openxmlformats.org/package/2006/relationships">
    <Relationship Type="https://schemas.openxmlformats.org/officeDocument/2006/relationships/worksheet" Target="/xl/worksheets/sheet.xml" Id="Rddc7711f116045e5" />
</Relationships>

sheet.xml 文件包含表示单元格表的 <sheetData> 元素。在此示例中,工作簿是空的,所以 <sheetData> 元素是空的。有关工作表的详细信息,请参阅使用工作表

以下 XML 代码是表示电子表格文档的工作表部分的 spreadsheetML。运行 Open XML SDK 2.0 以创建最小工作簿时,会生成此代码。

<?xml version="1.0" encoding="utf-8"?>
<x:worksheet xmlns:x="https://schemas.openxmlformats.org/spreadsheetml/2006/main">
    <x:sheetData />
</x:worksheet>

典型工作簿方案

典型工作簿不是空白的最小工作簿。典型工作簿可能包含数字、文本、图表、表和数据透视表。其中每个其他部分都包含在电子表格文档的 .zip 包中。

下图显示典型电子表格中可能包含的大多数元素。

图 2. 典型电子表格元素

SpreadsheetML 文档的结构