Excel

【C#】C#でExcelの出力・読み込み・操作をする新しい方法 【SpreadsheetLight】

はじめに

C#でExcelを扱うのには、Microsoft.Office.Interop.Excel・ClosedXML・NPOIなどが有名ですが、2020年末に新しいライブラリ「SpreadsheetLight」がリリースされました。

エクセルとLibreOfficeの出力、読み込み、操作(グラフや罫線、計算式)に対応しており、エクセルのインストールも不要です。無料でライセンスもMITなので、業務でも使いやすいライブラリになっています。

※具体的な使い方も別記事で分かりやすく解説しています。記事末「まとめ」のリンクもご覧ください。

この記事の内容
  • SpreadsheetLightの概要
  • ライセンス・人気度
  • サンプルコード

SpreadsheetLightの概要

2020年11月に公開された新しいライブラリです。xlsx形式のみ対応なので、ClosedXMLと似ていますが、ClosedXMLが対応していない、「グラフ挿入」ができる点がポイントです。

  • Excel2007 ~ の「xlsx形式」・ LibreOffice calc のファイルに対応
  • 読み込み・書き込み・操作が可能 (グラフの挿入もできる)
  • 豊富なサンプル・チュートリアルもあり。
  • 5400万個のセルを6分強で作成可能 (公式HP)
  • NuGetでのダウンロード数は80万回

「xls」はサポート外ですが、「xlsx」に変換すれば使用できます。

こんなことに使える

エクセルの読み/書き・操作が行えるので、以下のような作業に使えそうです。

  • エクセルデータ集計を自動化する
  • CSVなどの数値データを、グラフ付のエクセルファイルに自動変換する
  • NetOfficeなど遅いライブラリと入れ替えて処理の高速化をする

ライセンス・人気度

ライセンスMIT
.NET バージョン.NET Standard 2.0
NuGetダウンロード数     800k
GitHub Star数  --- ※GitHubページは存在しません
公開日2020年11月14日     

公式ページ

公式HPは以下です。商用ソフトのページのような外観ですが、FAQにて無料と記載されています。
オープンソースですがGitHubによる公開ではなく、ソースコードを公式HPからZIPでダウンロードする形式です。

公式HP: http://spreadsheetlight.com/

サンプルコード

公式ページに掲載されているサンプルコードを紹介します(コメントは日本語に意訳しています※)
数値や数式、文字列をエクセルファイルに書き込むサンプルです。

※ コメントの原文を確認したい方は、公式HPをご覧ください。

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

// SpreadSheetLight関連に使用します
using DocumentFormat.OpenXml;
using DocumentFormat.OpenXml.Spreadsheet;
using SpreadsheetLight;

namespace ConsoleAppSpreadSheetLight
{
    class Program
    {
        static void Main(string[] args)
        {
            SLDocument sl = new SLDocument();

            // A1のセルにBool型のTrueを設定します。(Excel:TRUE、LibreOffice:1)
            sl.SetCellValue("A1", true);

            // 2行目の1列目(A1)から、2行目の20列目(T1) に1~20の値を入力します。
            for (int i = 1; i <= 20; ++i) sl.SetCellValue(2, i, i);

            // B3のセルにPI(円周率)を入力します。
            sl.SetCellValue("B3", 3.14159);

            // 4行目の2列目(B4)に、PI(円周率)の数値を、文字列として入力する場合に使用します。
            sl.SetCellValueNumeric(4, 2, "3.14159");

            // C6セルに通常の文字列を入力します
            sl.SetCellValue("C6", "This is at C6!");

            // 特に & や <> など、典型的にXMLで無効となる文字にも対応しています
            sl.SetCellValue("I6", "Dinner & Dance costs < $10");

            // 数式を設定します
            // 等号で始まる文字列を設定したいが、数式ではない場合は、
            // 前にシングルクォートを付けてください。
            // 例えば、「'==」と入力すると、等号が2つ表示されます。
            sl.SetCellValue(7, 3, "=SUM(A2:T2)");

            // セルの参照やセルの範囲がどうしても必要な場合は、SLConvertクラスをご検討ください。
            sl.SetCellValue(SLConvert.ToCellReference(7, 4), string.Format("=SUM({0})", SLConvert.ToCellRange(2, 1, 2, 20)));

            // 日付として表示されるには、フォーマットコードが必要です。
            // そうしないと、ただの浮動小数点数のようになってしまいます。

            // C8セルに日付を入力します。(日時はデタラメ)
            sl.SetCellValue("C8", new DateTime(3141, 5, 9));

            // スタイルを作成して、FormatCodeを設定します。
            SLStyle style = sl.CreateStyle();
            style.FormatCode = "d-mmm-yyyy";

            // C8セルにスタイルを設定します。
            sl.SetCellStyle("C8", style);

            // 8行6列目(F8セル)に文字列を入力します。
            // (上記のデタラメな日付へのジョークの文字列です)
            sl.SetCellValue(8, 6, "I predict this to be a significant date. Why, I do not know...");

            // 9行4列目(D4セル)に数値を入力します(数値はデタラメ)
            sl.SetCellValue(9, 4, 456.123789);

            // 上記セルにスタイルを設定します。
            // FormatCodeプロパティを使用するだけなので、新しいSLStyleを作成する必要はありません。
            style.FormatCode = "0.000%";
            sl.SetCellStyle(9, 4, style);

            // 9行6列目(F8セル)に文字列を入力します。
            // (上記のデタラメな数値へのジョークの文字列です)
            sl.SetCellValue(9, 6, "Perhaps a phenomenal growth in something?");

            // ファイル名を指定して保存します。
            sl.SaveAs("HelloWorld.xlsx");

            // 終了待ちです。
            Console.WriteLine("End of program");
            Console.ReadLine();
        }
    }
}

実行結果

以下のエクセルファイル(xlsx)ファイルが生成されます。

まとめ

C#で使える無料のエクセルライブラリ「SpreadsheetLight」をご紹介しました。
「エクセルの読み・書き・操作をしたい!」という方にはぴったりなライブラリだと思います。

以下の記事で、SpreadsheetLightの詳しい使い方を解説しています。合わせてご覧ください。

  • SpreadsheetLightをNuGetでインストール&表の作成する。
  • SpreadsheetLightでグラフを挿入する。
  • SpreadsheetLightで罫線を設定する。

応援・要望お待ちしてます

ブログを見ていて「この辺を詳しく知りたい」「このライブラリの使い方を知りたい」「こんなことで困ってる」...etc があれば、コメント・問い合わせ・Twitterで教えてください。質問・ご要望に合わせて解説記事を作ります。

ブログを気に入っていただけたり、「応援してもいいよ」という方がいたら、ブログやSNSでの紹介をお願いします。 あたたかい応援は、中の人の更新の大きな励みになります。

ABOUT ME
えす
現役のソフトウェアエンジニアです。 C++ C# Python を使ってます。10年ちょい設計/開発部門にいましたが、今はQAエンジニアっぽいことをしています。

COMMENT

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です