使用 SpreadsheetML 表

本主题讨论 Open XML SDK Table 类及其与 Open XML 文件格式 SpreadsheetML 架构的关系。 有关构成 SpreadsheetML 文档的各个部分和元素的整体结构的详细信息,请参阅 SpreadsheetML 文档的结构 (Open XML SDK)

SpreadsheetML 中的表

ISO/IEC 29500 规范中的以下信息介绍了 table (<table/>) 元素。

表格帮助组织工作表中的信息列表和向信息列表提供结构。 表格具有明确标记的列、行和数据区域。 通过表格,用户可以更轻松地排序、分析、格式化、管理、添加和删除信息。

如果将数据区域指定为表格,则可以应用帮助用户执行有用操作的特殊行为。 [示例:如果用户在与表格底端相邻的行中键入其他数据,则表格可以扩展并自动将该数据添加到表格的数据区域。 同样,添加列与在当前列标题的右侧或左侧键入新列标题一样简单。 筛选和排序功能可以通过下拉箭头自动呈现给用户。 可以创建汇总或计算表格数据的特殊计算列。 这些列能够根据表格大小扩大和缩小,并且能够维护正确的公式引用。 示例结束]

可以基于以下几项创建表格:工作表中已经存在的数据、外部数据查询或者重复 XML 元素集合与工作表区域的映射。

工作表 XML 存储数字和文本数据。 表格 XML 记录特定表格对象的各个属性。

SpreadsheetML 表格是一个逻辑构造,指定属于单个数据集的数据区域。 SpreadsheetML 已使用类似表的模型来指定行和列中的值,但你也可以将工作表的子集标记为 , table 并为其提供对分析有用的某些属性。 通过 SpreadsheetML 中的表格,您可以使用新的方式分析数据,如使用数据筛选、格式化和绑定。

与 SpreadsheetML 中的其他构造一样,工作表中的表格存储在包的单独部件中。 表格部件不包含任何表格数据。 数据在工作表单元格中进行维护。 有关数据存储在工作表中的详细信息,请参阅 使用工作表

下表列出了使用 Table 类时使用的常见 Open XML SDK 类。

SpreadsheetML 元素 Open XML SDK 类
<tableColumn/> TableColumn
<autoFilter/> AutoFilter

Open XML SDK 表类

Open XML SDK Table 类表示在 SpreadsheetML 文档的 <table/> Open XML 文件格式架构中定义的表 () 元素。 Table使用 类可操作 SpreadsheetML 文档中的各个<table/>元素。

ISO/IEC 29500 规范中的以下信息介绍了 table (<table/>) 元素。

此部件类型的实例包含单个表及其自动筛选信息的说明。 (表的数据存储在相应的 Worksheet 部件中。)

此内容类型的部件的根元素应该为表格。

表格部件包含单个表格的定义。 如果一个工作表上存在多个表格,则存在多个表格部件。 此部件的根元素是表格。 从最低限度上讲,表格仅需要有关组成表格的表格列的信息。 然而,若要启用自动筛选,则必须至少定义一个自动筛选器(可以为空)。 如果不定义任何自动筛选器,则在 Excel 中打开文档时会禁用自动筛选。

元素 table 具有多个属性,用于标识表及其涵盖的数据范围。 idname 属性在所有表部件中必须是唯一的。 该 displayName 属性在所有表部件中必须是唯一的,在工作簿中所有定义的名称中必须是唯一的。 特性 name 由 Excel 中的对象模型使用。 属性 displayName 由公式中的引用使用。 属性 ref 用于标识表所涵盖的单元格区域。 这不仅包括表格数据,还包括含有列名称的表格标题。 有关表格属性的详细信息,请参阅 ISO/IEC 29500 规范。

TableColumn 类

若要向表添加列,请将新 tableColumn 元素添加到集合中 tableColumns 。 该集合具有跟踪列数的 count 属性。

ISO/IEC 29500 规范中的以下信息介绍了 TableColumn (<tableColumn/>) 元素。

表示此表格的单个列的元素。

Auto Filter 类

ISO/IEC 29500 规范中的以下信息介绍了 AutoFilter (<autoFilter/>) 元素。

自动筛选基于筛选条件暂时隐藏行,筛选条件逐列应用到工作表中的数据表格。 此集合描述自动筛选设置。

示例:此示例表示指示“仅显示大于 0.5 的值”的筛选器。 此筛选器应用于区域 B3:E8,并且该条件被应用到 colId=“1”(从左到右基于零的列编号)的列中的值。 因此,如果任何行的该特定列中的值小于或等于 0.5,则必须隐藏该行。

<autoFilter ref="B3:E8">
    <filterColumn colId="1">
        <customFilters>
            <customFilter operator="greaterThan" val="0.5"/>
        </customFilters>
    </filterColumn>
</autoFilter>

SpreadsheetML 示例

此示例显示在 Sheet1 中包含一个表格的文件的 XML。 表格包含三列和三行,以及一个列标题。

以下 XML 定义工作表并且包含在"sheet1.xml"文件中。 工作表 XML 文件包含表格中显示的实际数据,并包含 tablePart 引用包含表定义的“table1.xml”文件的元素。

    <?xml version="1.0" encoding="UTF-8" standalone="yes"?>
    <worksheet xmlns="http://schemas.openxmlformats.org/spreadsheetml/2006/main" xmlns:r="http://schemas.openxmlformats.org/officeDocument/2006/relationships" xmlns:mc="https://schemas.openxmlformats.org/markup-compatibility/2006" mc:Ignorable="x14ac" xmlns:x14ac="https://schemas.microsoft.com/office/spreadsheetml/2009/9/ac">
        <dimension ref="A1:C4"/>
        <sheetViews>
            <sheetView tabSelected="1" workbookViewId="0">
                <selection sqref="A1:C4"/>
            </sheetView>
        </sheetViews>
        <sheetFormatPr defaultRowHeight="15" x14ac:dyDescent="0.25"/>
        <cols>
            <col min="1" max="3" width="11" customWidth="1"/>
        </cols>
        <sheetData>
            <row r="1" spans="1:3" x14ac:dyDescent="0.25">
                <c r="A1" t="s">
                    <v>0</v>
                </c>
                <c r="B1" t="s">
                    <v>1</v>
                </c>
                <c r="C1" t="s">
                    <v>2</v>
                </c>
            </row>
            <row r="2" spans="1:3" x14ac:dyDescent="0.25">
                <c r="A2">
                    <v>1</v>
                </c>
                <c r="B2">
                    <v>2</v>
                </c>
                <c r="C2">
                    <v>3</v>
                </c>
            </row>
            <row r="3" spans="1:3" x14ac:dyDescent="0.25">
                <c r="A3">
                    <v>4</v>
                </c>
                <c r="B3">
                    <v>5</v>
                </c>
                <c r="C3">
                    <v>6</v>
                </c>
            </row>
            <row r="4" spans="1:3" x14ac:dyDescent="0.25">
                <c r="A4">
                    <v>7</v>
                </c>
                <c r="B4">
                    <v>8</v>
                </c>
                <c r="C4">
                    <v>9</v>
                </c>
            </row>
        </sheetData>
        <pageMargins left="0.7" right="0.7" top="0.75" bottom="0.75" header="0.3" footer="0.3"/>
        <tableParts count="1">
            <tablePart r:id="rId1"/>
        </tableParts>
    </worksheet>

以下 XML 定义表格并且包含在"table1.xml"文件中。 该表格 XML 文件定义表格区域和表格的外观,并且定义表格的所有自动筛选器。

    <?xml version="1.0" encoding="UTF-8" standalone="yes"?>
    <table xmlns="http://schemas.openxmlformats.org/spreadsheetml/2006/main" id="1" name="Table1" displayName="Table1" ref="A1:C4" totalsRowShown="0">
        <autoFilter ref="A1:C4"/>
        <tableColumns count="3">
            <tableColumn id="1" name="Column1"/>
            <tableColumn id="2" name="Column2"/>
            <tableColumn id="3" name="Column3"/>
        </tableColumns>
        <tableStyleInfo name="TableStyleMedium2" showFirstColumn="0" showLastColumn="0" showRowStripes="1" showColumnStripes="0"/>
    </table>