大阪市中央区 システムソフトウェア開発会社

営業時間:平日09:15〜18:15
MENU

OpenXMLでExcelのBookを作成してみる

著者:杉山貴規
公開日:2019/05/02
最終更新日:2019/05/01
カテゴリー:技術情報
タグ:

クローバーフィールドの杉山です。

連休なので、たまにはコードを書いてみたいと思います。
決して、家族に相手にされていないとか、友達が少ないとかではありません。
・・・知らんけど。

ちなみに、この記事で使用している開発環境はVisual Studio 2017で、言語はVisual C# 2017です。
OSは、Windows8.1で、.NetFramworkは、4.7はインストールされているコンピュータを使用しています。

開発環境のインストール方法などについては、マイクロソフト社のサイトをご確認ください。

今回から、私の平成最後の記事で紹介していたExcelなしで、Excelのデータが取扱いできるライブラリを使ってみようのシリーズです。

では、初回はOpenXML使ってみたいと思います。

今回は、c#のコンソールアプリケーションのプロジェクトを作成してください。
まず、新しいプロジェクトを作成し、OpenXMLのSDKを取得します。

nugetを使用してOpenXMLを取得したいと思います。

この記事を書き始めた時点の最新バージョンの2.9.1を使用します。

Viausl Studioのメニュー[ツール(T)]-[NuGetパッケージマネージャー]-[パッケージマネージャーコンソール]を選択してください。

起動したパッケージマネージャーコンソールで下記のコマンドを実行します。


PM> Install-Package DocumentFormat.OpenXml -Version 2.9.1

これで、コードを書く準備ができました。

今回の参考資料は、マイクロソフトのOpen XML SDK関連の情報を利用します。
まさに、「で?どうしたらええの」ってことで、[How do I… ]のSpreadsheets関連の情報を参照して進めていきたいと思います。

とりあえず、マイクロソフト社が開発に関わっているだけあって、使用できるBookの形式も、通常のxlsx形式だけでなく、マクロ的のBookやテンプレートなどにも対応しています。また、Cellなどの書式も事細かに設定できるようです。

半面、データを書き込むまでに作成が必要なオブジェクトが多く、手数が多いと感じました。
Cellの書式設定についても、かなり難解で日付や数値の設定を行うのが大変そうです。

名前のとおりOpen XMLの仕様を理解していないと使いこなせないライブラリだと思います。

下記のコードは、ほぼサンプルに近い状態です。
他のライブラリも今後試すので比較用に挙げてきおます。

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using DocumentFormat.OpenXml;
using DocumentFormat.OpenXml.Packaging;
using DocumentFormat.OpenXml.Spreadsheet;

namespace ExcelOpenXML
{
    class Program
    {
        static void Main(string[] args)
        {
            String filepath = @"C:\output\data.xlsx";

            // ブック(book)の追加
            SpreadsheetDocument spreadsheetDocument = SpreadsheetDocument.
                Create(filepath, SpreadsheetDocumentType.Workbook);

            WorkbookPart workbookpart = spreadsheetDocument.AddWorkbookPart();
            workbookpart.Workbook = new Workbook();

            WorksheetPart worksheetPart = workbookpart.AddNewPart<WorksheetPart>();
            worksheetPart.Worksheet = new Worksheet(new SheetData());

            // シート(sheet)の追加
            Sheets sheets = spreadsheetDocument.WorkbookPart.Workbook.
                AppendChild<Sheets>(new Sheets());

            Sheet sheet = new Sheet()
            {
                Id = spreadsheetDocument.WorkbookPart.GetIdOfPart(worksheetPart),
                SheetId = 1,
                Name = "mySheet"
            };
            sheets.Append(sheet);

            // 行(row)の追加
            SheetData sheetData = worksheetPart.Worksheet.GetFirstChild<SheetData>();
            Row row = new Row() { RowIndex = 1 };
            sheetData.Append(row);

            // セル(cell)の追加
            Cell refCell = null;
            Cell newCell = new Cell()
            {
                CellReference = "A1",
                DataType = CellValues.String,
                CellValue = new CellValue("Hello, Excel")
            };
            row.InsertBefore(newCell, refCell);

            // ブックの保存
            workbookpart.Workbook.Save();

            // Close the document.
            spreadsheetDocument.Close();
        }
    }
}
    上に戻る