ファイル名を指定してスプレッドシート ドキュメントを作成する

このトピックでは、Open XML SDK for Office のクラスを使用して、プログラムによってスプレッドシート ドキュメントを作成する方法について説明します。


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 メソッドを呼び出します。

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

Excel ドキュメント パッケージを作成したら、そのパッケージにパーツを追加できます。 ブック パーツを追加するには、SpreadsheetDocument クラスの AddWorkbookPart() メソッドを呼び出します。

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

ブック パーツには、1 つ以上のワークシートが必要です。 ワークシートを追加するには、新しい Sheet を作成します。 新しい Sheet を作成する場合、Idパラメーター、SheetIdパラメーター、Name パラメーターを渡して、SheetWorkbook を関連付けます。 GetIdOfPart(OpenXmlPart) メソッドを使用して、SheetId を取得します。 次に、Sheets クラスの Append([]) メソッドを呼び出して、新しいシートを Sheet コレクションに追加します。

Open XML SDK を使用して基本的なドキュメント構造を作成するには、Workbook クラスをインスタンス化し、それをメインドキュメント パーツの WorkbookPart プロパティに割り当ててから、WorksheetPartWorksheet、Sheet のインスタンスを追加します。 次のコード例では、新しいワークシートを作成し、関連付けて、ブックに追加します。

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

// Add Sheets to the Workbook.
Sheets sheets = workbookPart.Workbook.AppendChild(new Sheets());

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

サンプル コード

以下は、C# および Visual Basic の完全なサンプル コードです。

using DocumentFormat.OpenXml;
using DocumentFormat.OpenXml.Packaging;
using DocumentFormat.OpenXml.Spreadsheet;

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 = workbookPart.Workbook.AppendChild(new Sheets());

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

    workbookPart.Workbook.Save();

    // Dispose the document.
    spreadsheetDocument.Dispose();
}

関連項目