次の方法で共有


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 Table Class

Open XML SDK Table クラスは、SpreadsheetML ドキュメントの Open XML ファイル形式スキーマで定義されているテーブル (<table/>) 要素を表します。 Table クラスを使用して、SpreadsheetML ドキュメント内の個々の<table/>要素を操作します。

ISO/IEC 29500 仕様の次の情報では、 table (<table/>) 要素について説明します。

このパーツ型のインスタンスには、1 つのテーブルとそのオートフィルター情報の説明が含まれています。 (テーブルのデータは、対応する Worksheet パーツに格納されます)。

このコンテンツ タイプのパーツのルート要素は、テーブルである必要があります。

テーブル パーツには、単一のテーブルの定義が含まれます。 ワークシートに複数のテーブルが含まれる場合は、テーブル パーツも複数含まれます。 テーブル パーツのルート要素はテーブルです。 最低限、テーブルには、テーブルを構成する列についての情報が必要です。 ただし、オートフィルタリングを有効にするには、オートフィルターを少なくとも 1 つ定義しておく必要があります (このオートフィルターは空でもかまいません)。 オートフィルターを定義していないと、オートフィルタリングは Excel でドキュメントを開くときに無効になります。

table要素には、テーブルとその対象となるデータ範囲を識別するために使用されるいくつかの属性があります。 id属性とname属性は、すべてのテーブル パーツで一意である必要があります。 displayName属性は、すべてのテーブル パーツで一意であり、ブック内で定義されているすべての名前で一意である必要があります。 name属性は、Excel のオブジェクト モデルで使用されます。 displayName属性は、数式内の参照によって使用されます。 ref属性は、テーブルがカバーするセル範囲を識別するために使用されます。 この範囲には、テーブルのデータだけでなく、列の名前を含むテーブルの見出しも含まれます。 テーブルの属性の詳細については、ISO/IEC 29500 の仕様を参照してください。

TableColumn クラス

テーブルに列を追加するには、新しい tableColumn 要素を tableColumns コレクションに追加します。 このコレクションには、列数を追跡するカウント属性があります。

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 に 1 つのテーブルを含むファイルの XML を示します。 このテーブルには 3 つの列、3 つの行、および列の見出しがあります。

ワークシートを定義している次の XML は、"sheet1.xml" ファイルに含まれます。 ワークシート XML ファイルには、テーブルに表示される実際のデータが含まれており、テーブル定義を含む "table1.xml" ファイルを参照する tablePart 要素が含まれています。

    <?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>