[C#][VB] Excelを扱うオープンソースライブラリ(ClosedXML)

[C#][VB] Excelを扱うオープンソースライブラリ(ClosedXML)

Excelファイルを開いたり保存したりしたいけど …

.NET のアプリケーションを開発していると、何かにつけてExcelファイルを取り扱いたい場面に出会います。Excelを扱うのにCOM(Microsoft.Office.Interop.Excel)を使う方法がありますが、取り扱い方法を間違えるとプロセスが残るという問題があります。それを避けるにはかなり込み入ったコードの書き方をしなければなりません。

さらにCOMを使うには動作環境にExcelのインストールが必要になります。つまり何かと面倒で手間がかかるのです。

Microsoft.Office.Interop.Excelを使う方法を推奨しない理由

上記のページは参考になります。

ClosedXML – オープンソースのライブラリを使う

Excelには2つの種類の拡張子 “xls” “xlsx” があります。この “xls” は、Microsoftの独自規格ですが、”xlsx” はオープンな規格(Office Open XML)です(“docx”, “pptx”も同様)。つまりファイルの仕様が公開されているものです。Open XML を扱うためのマイクロソフト謹製のライブラリ(DocumentFormat.OpenXml)も存在しています。

この “DocumentFormat.OpenXml” をラップして使いやすくしたオープンソースのライブラリがあり、今回はこれの簡単な使い方を見ていきます。”ClosedXML” です。

https://github.com/closedxml/closedxml

ClosedXML は、拡張子 “xlsx” のファイルを操作できます。”xls” 形式のファイルは扱えないので注意しましょう。

サンプル

Excelブックの生成と値の代入、関数での計算を行います。さらにそれを適当なパスに保存しています。

Excelファイルを読み込み、シートの末尾行まで走査し、それを出力しています。

var path = "sample.xlsx";

// ブックを生成
using (var workbook = new XLWorkbook())
{
    // シートを生成
    var worksheet = workbook.Worksheets.Add("サンプルシート");

    // セルに値を代入(いろんな指定ができます)
    worksheet.Cell("A1").Value = 1;
    worksheet.Cell(2, 1).Value = 2;
    worksheet.Range(3, 1, 3, 2).Value = 3;

    // SUM関数を代入(ValueではなくFormula、=は入れない)
    worksheet.Cell(4, 1).FormulaA1 = "SUM(A1:A3)";

    // 計算結果を取得することもできる
    var sum = worksheet.Evaluate("SUM(A1:A3)");

    // 保存
    workbook.SaveAs(path);
}

// ブックを読み込む
using (var workbook = new XLWorkbook(path))
{
    // 1シート目を取得
    var worksheet = workbook.Worksheets.Worksheet(1);

    // A列を末尾まで走査
    var lastRow = worksheet.LastRowUsed().RowNumber();
    for (int i = 1; i <= lastRow; i++)
    {
        var value = worksheet.Cell($"A{i}").Value?.ToString();
        Console.WriteLine($"A{i}, {value}");
    }
}

VB.NET も、同じような感じで扱えます。

上記コードは一例ですが、ライブラリの中身はMicrosoftのライブラリなので、機能は十分です。使うファイルが “xlsx” のみで問題なければ十分利用の価値はありそうです。

以上です。

C#カテゴリの最新記事