SpreadsheetML ドキュメントの構造
適用対象: Excel 2010 | Office 2010 | PowerPoint 2010 | Word 2010
この記事の内容
スプレッドシートの重要なパーツ
最低限のブックのシナリオ
標準的なブックのシナリオ
SpreadsheetML ドキュメントのドキュメント構造は、<sheets> を含む <workbook> 要素と、ブック内のワークシートを参照する <sheet> 要素で構成されます。ワークシートごとに異なる XML ファイルが作成されます。これらの要素は、有効なスプレッドシート ドキュメントに必要な最低限の要素です。スプレッドシート ドキュメントは、さらに、<table>、<chartsheet>、<pivotTableDefinition>、または他のスプレッドシート関連の要素を含む場合があります。
このセクションの内容
スプレッドシートの重要なパーツ
Open XML SDK 2.0 を使用すると、SpreadsheetML の要素に対応する厳密に型指定されたクラスを使用したドキュメント構造とコンテンツを作成できます。これらのクラスは DocumentFormat.OpenXML.Spreadsheet 名前空間にあります。次の表は、スプレッドシートの重要な要素の一部に対応するクラスのクラス名の一覧です。
パッケージのパーツ |
最上位の SpreadsheetML 要素 |
Open XML SDK 2.0 のクラス |
説明 |
---|---|---|---|
ブック |
workbook |
メイン ドキュメント パーツのルート要素。 |
|
ワークシート |
worksheet |
テキスト、数値、日付、または式を含むセルのグリッドを表すシートの種類。詳細については、「シートを操作する」を参照してください。 |
|
グラフ シート |
chartsheet |
独自のシートとして格納されるグラフを表すシート。詳細については、「シートを操作する」を参照してください。 |
|
テーブル |
table |
データの範囲が単一のデータセットに属することを指定する論理的な構造。詳細については、「表を操作する (SpreadsheetML)」を参照してください。 |
|
ピボットテーブル |
pivotTableDefinition |
データの集約されたビューをわかりやすいレイアウトで表示する論理的な構造。詳細については、「ピボットテーブルの操作」を参照してください。 |
|
ピボット キャッシュ |
pivotCacheDefinition |
PivotTable のデータのソースを定義する構造。詳細については、「ピボットテーブルの操作」を参照してください。 |
|
ピボット キャッシュ レコード |
pivotCacheRecords |
PivotTable のソース データのキャッシュ。詳細については、「ピボットテーブルの操作」を参照してください。 |
|
計算チェーン |
calcChain |
ブック内のセルが最後に計算された順序を指定する構造。詳細については、「計算チェーンを操作する」を参照してください。 |
|
共有文字列テーブル |
sst |
ブックの全ワークシートに出現する一意の各文字列が 1 つずつ格納される構造。詳細については、「共有文字列テーブルを操作する」を参照してください。 |
|
条件付き書式設定 |
conditionalFormatting |
1 つのセルまたは一連のセルに適用される書式を定義する構造。詳細については、「条件付き書式を操作する」を参照してください。 |
|
式 |
f |
式を格納するセルの式テキストを定義する構造。詳細については、「式を操作する」を参照してください。 |
最低限のブックのシナリオ
Standard ECMA-376 (英語) の次のテキストでは、最低限のブックのシナリオは示されています。
可能な限り最も小さい (空白の) ブックには、次のものが含まれる必要があります。
1 つのシート
シート 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. 標準的なスプレッドシートの要素