【Excel操作】SpreadsheetLightを使ってみた【C#】

Windowsフォームアプリケーション(C#)にて、Excelファイルを操作するライブラリ「SpreadsheetLight」を使ってみたので紹介します。

SpreadsheetLightとは

SpreadsheetLightは、C#で書かれた.NET Framework用のオープンソースのライブラリです。MITライセンスで公開されています。

新しくOpen XML形式のファイルを作成したり、Microsoft Excel(2007以降)やLibreOffice Calcと互換性のある既存のOpen XML形式のファイルを操作することができます。Excelをインストールする必要はありません。

Excelを操作するライブラリで有名なものにClosedXMLがありますが、(私の知る限り)ClosedXMLには無いグラフの生成機能がこのライブラリには存在します。

開発元のWebサイトはこちら

SpreadsheetLightを使ってみる

開発環境

  • Windows 10 Pro (64bit)
  • Microsoft Visual Studio Community 2019
    言語:C#
    ターゲットフレームワーク:.NET Framework 4.7.2

パッケージのインストール

Windowsフォームアプリケーション(.NET Framework)の新しいプロジェクトを作成した後、[プロジェクト] メニューの [Nugetパッケージの管理] を選択します。

検索ボックスに SpreadsheetLight と入力して検索し、検索結果から SpreadsheetLight を選択してインストールボタンをクリックします。

「ライセンスへの同意」ダイアログが表示されたら「同意する」をクリック。

using ディレクティブの指定

下記のようにusing ディレクティブをサンプルコードのクラスファイルの先頭に追加しておきます。

using SpreadsheetLight;
using SpreadsheetLight.Charts;
using DocumentFormat.OpenXml;
using DocumentFormat.OpenXml.Spreadsheet;

Excelファイルの作成、データの書き込み

Excelファイルを作成してデータ・数式を書き込んだ後、保存を行なってみます。

using (var sl = new SLDocument())
{
    // A1セルに数値をセットする。(アドレスでセルを指定)
    sl.SetCellValue("A1", 100);
    // A2セルに数値をセットする。(行番号、列番号でセルを指定)
    sl.SetCellValue(2, 1, 200);
    // A3セルに数式をセットする。
    sl.SetCellValue("A3", "=SUM(A1:A2)");
    // ファイルに保存する。
    sl.SaveAs(@".\test.xlsx");
}

上記コードを実行するとexeファイルと同じ場所に「test.xlsx」が作成されます。Excelで中身を確認すると下の画像のようになります。

コーディングした通りセルにデータや数式が正しく書き込まれました。

書式設定

次は書式設定を行なってみます。

using (var sl = new SLDocument())
{
    // B2セルに文字列を書き込む。
    sl.SetCellValue("B2", "書式設定");
    
    // スタイルを設定するためのクラスのインスタンスを作成する。
    SLStyle style = sl.CreateStyle();

    // テキストの配置を設定する。
    style.Alignment.Horizontal = HorizontalAlignmentValues.Center;
    style.Alignment.Vertical = VerticalAlignmentValues.Bottom;

    // セルの塗りつぶしを設定する。
    style.Fill.SetPattern(PatternValues.Solid, System.Drawing.Color.SkyBlue, System.Drawing.Color.Empty);
    
    // セルの罫線を設定する。
    style.Border.BottomBorder.BorderStyle = BorderStyleValues.DashDot;
                
    // フォントを設定する。
    style.Font.FontName = "メイリオ";
    style.Font.FontSize = 18;              
    style.Font.Bold = true;               

    // B2セルに書式を設定する。
    sl.SetCellStyle("B2", style);

    // ファイルに保存する。
    sl.SaveAs(@".\test.xlsx");
}           

上記コードを実行するとexeファイルと同じ場所に「test.xlsx」が作成されます。Excelで中身を確認すると下の画像のようになります。

文字配置、塗りつぶし、罫線、フォントの書式設定ができました。

Excelファイルの読み込み

既存のExcelファイルの読み込みを行なってみます。exeファイルと同じ場所に「sample.xlsx」を作成し、中身は下の画像のようにしておきます。

用意したExcelファイルを読み込んでみます。

using (var sl = new SLDocument(@".\sample.xlsx"))
{
    // A1セルの文字列を読み込んで表示する。
    Console.WriteLine($"A1:{sl.GetCellValueAsString("A1")}");
    // B2セルの文字列を読み込んで表示する。
    Console.WriteLine($"B2:{sl.GetCellValueAsString("B2")}");
    // C3セルの文字列を読み込んで表示する。(行番号、列番号でセルを指定)
    Console.WriteLine($"C3:{sl.GetCellValueAsString(3, 3)}");
}

上記コードを実行すると下の画像のように、出力ウィンドウに結果が表示されます。

Excelファイルを正しく読み込むことができました。

グラフの作成

縦棒グラフの作成を行なってみます。

using (var sl = new SLDocument())
{
    // グラフデータを作成する。->
    sl.SetCellValue("A2", "リンゴ");
    sl.SetCellValue("A3", "バナナ");
    sl.SetCellValue("A4", "みかん");
    sl.SetCellValue("B1", "1月");
    sl.SetCellValue("C1", "2月");
    sl.SetCellValue("D1", "3月");
    sl.SetCellValue("E1", "4月");
       
    var rand = new Random();
    for (int row = 2; row <= 4; row++)
    {
        for (int col = 2; col <= 5; col++)
        {
            sl.SetCellValue(row, col, rand.Next(1, 100));
        }
    }
    // <-

    double chartHeight = 15.0;      // グラフの高さ
    double chartWidth = 5.5;        // グラフの幅

    // SLChart(グラフのオブジェクト)のインスタンスを作成する。
    SLChart chart = sl.CreateChart("A1", "E4");
    // 縦棒グラフに設定する。
    chart.SetChartType(SLColumnChartType.ClusteredColumn);
    // グラフの位置とサイズを設定する。(Top, Left, Bottom, Right)
    chart.SetChartPosition(5, 1, 5 + chartHeight, 1 + chartWidth);
    // 現在のワークシートにグラフを挿入する。
    sl.InsertChart(chart);
    // ファイルに保存する。 
    sl.SaveAs("chart.xlsx");
}

上記コードを実行するとexeファイルと同じ場所に「chart.xlsx」が作成されます。Excelで中身を確認すると下の画像のようになります。

Excelファイルにグラフを挿入することができました。

最後に

SpreadsheetLightを使うことで、Excelの操作を短いコードで分かりやすく書くことができます。また、今回紹介した機能の他にもたくさんの機能があり、細かくExcelを操作できます。

COMでExcelを操作する場合は、Excelのプロセスが残らないように解放処理をたくさん書く必要がありますが、このライブラリではそういった苦労も不要です。

他のライブラリと速度の比較はしていませんが、特に遅いとは感じませんでした。

使いやすくて良いライブラリだと思います。試してみてはいかがでしょうか。

タイトルとURLをコピーしました