Open XML SDK を利用して空のExcelファイルを作成する - C#

Open XML SDK を利用して空のExcelファイルを作成するコードを紹介します。

事前準備

Windows Form プロジェクトを作成し、Open XML SDK のインストールと参照を追加します。手順はこちらの記事を参照してください。

プログラム

UI

下図のUIを作成します。フォームにボタンを一つ配置します。

コード

下記のコードを記述します。
ボタンのClickイベントを実装します。
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using DocumentFormat.OpenXml;
using DocumentFormat.OpenXml.Packaging;
using DocumentFormat.OpenXml.Spreadsheet;

namespace ExcelApp
{
  public partial class Form_SimpleCreateFile : Form
  {
    public Form_SimpleCreateFile()
    {
      InitializeComponent();
    }

    private void button1_Click(object sender, EventArgs e)
    {
      SpreadsheetDocument doc = SpreadsheetDocument.Create("c:\\data\\test.xlsx", SpreadsheetDocumentType.Workbook);
      
      WorkbookPart wbpart = doc.AddWorkbookPart();
      wbpart.Workbook = new Workbook();
      WorksheetPart wspart = wbpart.AddNewPart<WorksheetPart>();
      wspart.Worksheet = new Worksheet(new SheetData());
      Sheets sheets = doc.WorkbookPart.Workbook.AppendChild<Sheets>(new Sheets());

      Sheet sheet = new Sheet();
      sheet.Id = doc.WorkbookPart.GetIdOfPart(wspart);
      sheet.SheetId = 1;
      sheet.Name = "テストです";
      sheets.Append(sheet);

      wbpart.Workbook.Save();

      doc.Close();

      MessageBox.Show("Excel Bookを作成しました。");
    }
  }
}

解説

スプレッドシートのドキュメントオブジェクト(SpreadsheetDocument)を作成します。
SpreadsheetDocument のコンストラクタの第一引数にスプレッドシートの保存先のファイル名、第二引数に種類をしています。今回はWorkbookを指定しています。
  SpreadsheetDocument doc = SpreadsheetDocument.Create("c:\\data\\test.xlsx", SpreadsheetDocumentType.Workbook);

スプレッドシートドキュメント内に、ワークブックのオブジェクトを追加して作成します。AddWorkbookPart() メソッドによりWorkBookPart オブジェクトが追加されます。WorkBookPart オブジェクトの Workbookプロパティがワークブックオブジェクトになります。Workbookオブジェクトのコンストラクタを呼び出してオブジェクトを作成します。
   WorkbookPart wbpart = doc.AddWorkbookPart();
   wbpart.Workbook = new Workbook();

ワークブック内にワークシートオブジェクトを追加して作成します。 WorkbookPartオブジェクトの AddNewPaert() メソッドを呼び出すことで、WorksheepPart オブジェクトが追加されます。
WorksheepPart オブジェクトの Worksheetプロパティがワークシートオブジェクトになります。Worksheetオブジェクトのコンストラクタを呼び出してオブジェクト作成します。
  WorksheetPart wspart = wbpart.AddNewPart<WorksheetPart>();
  wspart.Worksheet = new Worksheet(new SheetData());

ワークブックオブジェクトにシート一覧オブジェクトを追加します。
  Sheets sheets = doc.WorkbookPart.Workbook.AppendChild<Sheets>(new Sheets());

シートオブジェクトを作成します。シートのIDはドキュメントのWorkbookPartオブジェクトのGetIdOfPart メソッドで取得します。
シート名はNameプロパティに設定します。作成したシートオブジェクトはシート一覧オブジェクト(Sheets)に追加します。 追加はSheetsオブジェクトのAppendメソッドを呼び出して実行します。
  Sheet sheet = new Sheet();
  sheet.Id = doc.WorkbookPart.GetIdOfPart(wspart);
  sheet.SheetId = 1;
  sheet.Name = "テストです";
  sheets.Append(sheet);

ワークブックをファイルに保存します。スプレッドシートドキュメントのワークブックオブジェクトのSaveメソッドを呼び出すとワークブックを保存できます。
  wbpart.Workbook.Save();

再度にスプレッドシートドキュメントを閉じます。ドキュメントを閉じないと、ディスクに書き込み内容が反映されない場合がありますので、 実際の実装ではfinallyなどを利用して、確実に呼ばれるようにしておくほうが良いです。
  doc.Close();

処理後にメッセージボックスを表示します。
  MessageBox.Show("Excel Bookを作成しました。");

実行結果

プロジェクトを実行します。下図のウィンドウが表示されます。[button1]のボタンをクリックします。


ボタンをクリックすると処理が実行され、Excel Bookを作成した旨のメッセージボックスが表示されます。


Excel Bookの保存ディレクトリを確認します。指定した名称の xslx ファイルが作成されていることが確認できます。ファイルサイズが 0KBではなく、1.60KBありファイルの中身がある程度あることが確認できます。(ファイルサイズが 0KB の場合は、ドキュメントのクローズなどが実行されていない関係で、ファイルの書き込みが完了していない可能性があります。)


作成されたxslxファイルを開きます。空のExcelシートが表示されます。ウィンドウ下部のシート名が「テストです」になっており、コードで指定した名称と同じになっていることが 確認できます。


Open XML SDKを利用して空のExcelブックのファイルを作成できました。

著者
iPentecのメインプログラマー
C#, ASP.NET の開発がメイン、少し前まではDelphiを愛用
最終更新日: 2020-10-12
作成日: 2020-10-11
iPentec all rights reserverd.