ファイル名を指定してスプレッドシート ドキュメントを作成する
適用対象: Excel 2010 | Office 2010 | PowerPoint 2010 | Word 2010
この記事の内容
SpreadsheetDocument オブジェクトを取得する
SpreadsheetML ドキュメントの基本構造
SpreadsheetML マークアップを生成する
サンプル コード
ここでは、Open XML SDK 2.0 for Microsoft Office のクラスを使用して、プログラムによってスプレッドシート ドキュメントを生成する方法を説明します。
このトピックのコードをコンパイルするには、次のアセンブリ ディレクティブが必要です。
using DocumentFormat.OpenXml;
using DocumentFormat.OpenXml.Packaging;
using DocumentFormat.OpenXml.Spreadsheet;
Imports DocumentFormat.OpenXml
Imports DocumentFormat.OpenXml.Packaging
Imports DocumentFormat.OpenXml.Spreadsheet
SpreadsheetDocument オブジェクトを取得する
Open XML SDK では、SpreadsheetDocument クラスは Excel ドキュメント パッケージを表します。Excel ドキュメントを作成するには、SpreadsheetDocument クラスのインスタンスを作成して、パーツを設定します。ドキュメントには、少なくとも、ドキュメントのコンテナーとなるブック パーツとワークシート パーツが 1 つずつ必要です。テキストはパッケージ内で SpreadsheetML マークアップを使用して XML として表されます。
クラス インスタンスを作成するには、Create(Package, SpreadsheetDocumentType) メソッドを呼び出します。いくつかの Create メソッドが提供されており、シグネチャがそれぞれ異なります。このトピックのサンプル コードでは、2 つのパラメーターを必要とするシグネチャを持つ Create メソッドを使用します。1 つ目のパラメーター package は、作成するドキュメントを表す完全なパスの文字列を取ります。2 つ目のパラメーター type は、SpreadsheetDocumentType 列挙のメンバーです。このパラメーターはドキュメントの種類を表します。アドイン、テンプレート、ブック、そして、マクロ対応のテンプレートおよびブックそれぞれに対して、SpreadsheetDocumentType 列挙のメンバーは異なります。
注意
適切な SpreadsheetDocumentType を選択して、保存されたファイルが正しく一致するファイル名拡張子を持つことを確認します。SpreadsheetDocumentType がファイル名拡張子と一致しないと、Excel でファイルを開くときにエラーが発生します。
次のコード例は、Create メソッドを呼び出します。
SpreadsheetDocument spreadsheetDocument =
SpreadsheetDocument.Create(filepath, SpreadsheetDocumentType.Workbook);
Dim spreadsheetDocument As SpreadsheetDocument = _
SpreadsheetDocument.Create(filepath, SpreadsheetDocumentType.Workbook)
Excel ドキュメント パッケージを作成したら、そのパッケージにパーツを追加できます。ブック パーツを追加するには、SpreadsheetDocument クラスの AddWorkbookPart() メソッドを呼び出します。ブック パーツには、少なくとも 1 つのワークシートが必要です。ワークシートを追加するには、新しい Sheet を作成します。新しい Sheet を作成する場合、Id、SheetId、および Name パラメーターを渡して、Sheet と Workbook に関連付けます。GetIdOfPart(OpenXmlPart) メソッドを使用して、Sheet の Id を取得します。次に、Sheets クラスの Append([]) メソッドを呼び出して、新しいワークシートを Sheet コレクションに追加します。次のコード例は、新しいワークシートを作成し、関連付けて、ブックに追加します。
Sheet sheet = new Sheet() { Id = spreadsheetDocument.WorkbookPart.
GetIdOfPart(worksheetPart), SheetId = 1, Name = "mySheet" };
sheets.Append(sheet);
Dim sheet As New Sheet() With {.Id = spreadsheetDocument.WorkbookPart.GetIdOfPart(worksheetPart), .SheetId = 1, .Name = "mySheet"}
sheets.Append(sheet)
SpreadsheetML ドキュメントの基本構造
次のコード例は、サンプル コードが作成するブックの SpreadsheetML マークアップです。
<x:workbook xmlns:r="https://schemas.openxmlformats.org/officeDocument/2006/relationships" xmlns:x="https://schemas.openxmlformats.org/spreadsheetml/2006/main">
<x:sheets>
<x:sheet name="mySheet" sheetId="1" r:id="R47fd958b504b4526" />
</x:sheets>
</x:workbook>
SpreadsheetML ドキュメントの基本構造は、Sheets および Sheet 要素で構成されます。これは、ブックのワークシートを参照するものです。個々のワークシートに対して XML ファイルが個別に作成されます。ワークシート XML ファイルには、SheetData などのブロック レベル要素が 1 つまたは複数含まれます。sheetData はセルのテーブルを表し、1 つまたは複数の Row 要素を含みます。row には 1 つまたは複数の Cell 要素が含まれます。各セルは、セル値を表す CellValue 要素を含みます。次のコード例は、サンプル コードによって作成されるワークシートの SpreadsheetML マークアップです。
<x:worksheet xmlns:x="https://schemas.openxmlformats.org/spreadsheetml/2006/main">
<x:sheetData />
</x:worksheet>
Open XML SDK 2.0 を使用すると、SpreadsheetML 要素に対応する厳密に型指定されたクラスを使用する、ドキュメント構造とコンテンツを作成できます。これらのクラスは、DocumentFormat.OpenXml.Spreadsheet 名前空間にあります。workbook、sheets、sheet、worksheet、および sheetData 要素に対応するクラスの名前を次の表に示します。
SpreadsheetML 要素 |
Open XML SDK 2.0 クラス |
説明 |
---|---|---|
workbook |
DocumentFormat.OpenXml.Spreadsheet.Workbook |
メイン ドキュメント パーツのルート要素 |
sheets |
DocumentFormat.OpenXml.Spreadsheet.Sheets |
ISO/IEC 29500 (英語) の仕様で規定されている、シート、ファイル バージョン、その他のブロック レベル構造のコンテナー。 |
sheet |
DocumentFormat.OpenXml.Spreadsheet.Sheet |
シート定義ファイルを指すシート |
worksheet |
DocumentFormat.OpenXml.Spreadsheet.Worksheet |
シート データを含むシート定義ファイル |
sheetData |
DocumentFormat.OpenXml.Spreadsheet.SheetData |
行でグループ化されている、セルのテーブル |
SpreadsheetML マークアップを生成する
Open XML SDK を使用して基本のドキュメント構造を作成するには、Workbook クラスをインスタンス化し、メイン ドキュメント パーツの WorkbookPart プロパティに割り当てて、WorksheetPart、Worksheet、および Sheet クラスのインタンスを追加します。この例をサンプル コードに示します。さらに、必要な SpreadsheetML マークアップを生成します。
サンプル コード
この例の CreateSpreadsheetWorkbook メソッドは、基本の Excel ドキュメント、"mySheet" という名前の 1 つのシートを含むブックを作成する際に使用できます。これをプログラムで呼び出すには、パブリック ドキュメント フォルダーに "Sheet2.xlsx" という名雨のファイルを作成する次のコード例を使用できます。
CreateSpreadsheetWorkbook(@”c:\Users\Public\Documents\Sheet2.xlsx”)
CreateSpreadsheetWorkbook(”c:\Users\Public\Documents\Sheet2.xlsx”)
ファイル名拡張子 .xlsx は、Create メソッドへの呼び出しの SpreadsheetDocumentType.Workbook パラメーターによって指定されるファイルの種類と一致することに注意してください。
以下は、C# および Visual Basic の完全なサンプル コードです。
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