エクセルは表計算ソフトとして社会人の多くが利用している必須アプリの1つです。
C#を使ってエクセルの読み込みや書き込み等の操作を制御できれば、これまで時間を費やしていた単純な作業を自動化させ、業務を効率することに繋がるでしょう。
今回は、エクセルがパソコンにインストールされていなくても、入力や出力ができる便利なライブラリ「SpreadsheetLight」を使った基本的な操作について紹介します。
SpreadsheetLightについて
Microsoftが提供するExcel(2007以降)およびLibreOffice Calcと互換性があるオープンソースのライブラリです。無料で利用できるMITライセンスで商用利用も可能です。
セル単位の読み書きはもちろん、条件付き書式の追加や図・グラフの挿入を簡単に行うことができます。
Microsoft.Office.Interop.Excelとは異なり、エクセルがインストールされていないパソコンでも動作させることが可能なのは大きなメリットの1つです。
2012年にバージョン1.0がリリースされてから機能追加やバグの修正が行われており、最新バージョンは3.5.0でした(2021年11月現在)。
NuGetで公開されており、C#で開発する場合は該当のライブラリをインストールしましょう。
NuGetでインストール
まずはVisual Studioを起動して任意のプロジェクト名でプロジェクトを新規作成します。
ソリューション エクスプローラーからプロジェクトを選択して右クリックして「NuGet パッケージの管理」を選択します。
開いたNuGetパッケージマネージャーで「参照」を選択し、検索欄に「SpreadsheetLight」と入力します。
検索結果の一覧の中にある「SpreadsheetLight」を選択して「インストール」を押します。
インストールが正常に終了したら完了です。
エクセルの操作方法
C#で利用できるライブラリ「SpreadsheetLight」を使用して、エクセルを操作する方法について紹介します。頻繁に利用する操作をピックアップして、項目別にコードの書き方をまとめています。
名前空間の宣言
using SpreadsheetLight;
using DocumentFormat.OpenXml;
using DocumentFormat.OpenXml.Spreadsheet;
これをしないと、型または名前空間の名前’xxxx’が見つかりませんでした(usingディレクティブまたはアセンブリ参照が指定されていることを確認してください)というエラーメッセージが表示されます。
上記のコードをプロジェクトファイルのヘッダー部分に追加しましょう。
ワークシートの作成
ワークシートに対して操作をするので、SDLDocumentクラスを使って新しいスプレッドシートを作成します。
SLDocument オブジェクト名 = new SLDocument();
SLDocument sl = new SLDocument();
既存のエクセルファイルを読み込んで操作をしたい場合は、ファイルパスを引数で渡すと参照することが可能です。
SLDocument オブジェクト名 = new SLDocument(ファイルパス);
SLDocument sl = new SLDocument(@"C:\sample.xlsx");
SLDocumentクラスに用意されているメソッドやプロパティを駆使して、文字列や数値の入力や編集、書式設定を行います。
セルにデータの書き込み
1つのセルに対してデータを書き込みを行う場合は、SetCellValueを使って行と列を指定して、入力する文字列や数値等を設定します。
オブジェクト名.SetCellValue(“列行”, “書き込む文字列”)
sl.SetCellValue("A1", "Hello World");
もしくは行列を行数と列数に分けて書くこともできます。
オブジェクト名.SetCellValue(行数, 列数, “入力する文字列”)
//1行目の1列目にHello Worldを入力する
sl.SetCellValue(1, 1, "Hello World");
このコードでセルへ文字列を書き込んで、エクセルで開くと以下の結果になります。
数式の入力
エクセルで使用する関数を使うことができます。
オブジェクト名.SetCellValue(“列行”, “関数”)
sl.SetCellValue("A1", 2);
sl.SetCellValue("A2", 5);
sl.SetCellValue("A3", "=SUM(A1:A2)");
例ではSUM関数を使用しており、2+5の和である7がセルの「A3」に入力されます。
ワークシートの追加
新しくシートを追加したい場合は、AddWorksheetメソッドを使用します。
オブジェクト名.AddWorksheet(“ワークシート名”)
sl.AddWorksheet("追加シート");
設定したシート名でシートが追加されます。
ワークシートの選択
複数のワークシートの中から作業したいシートを選択するには、SelectWorksheetを使用します。
オブジェクト名.SelectWorksheet(“ワークシート名”)
sl.SelectWorksheet("追加シート");
選択したシートが選択されます。
ワークシートの名前変更
ワークシートの名前を変更するには、RenameWorksheetを使用します。
オブジェクト名.RenameWorksheet(“既存のシート名”, “変更後のシート名”)
sl.RenameWorksheet(SLDocument.DefaultFirstSheetName, "名前変更シート");
シートの名前が変更されます。
セルのフォントスタイル変更
フォントの変更はSLStyleのインスタンスを生成してSetFontに、フォント名とフォントサイズを指定します。スタイルをSetCellStyleでセルに適応させれば変更ができます。
SLStyle 変数名 = sl.CreateStyle();
変数名.SetFont(“フォント名”, フォントサイズ);
オブジェクト名.SetCellStyle(“行列”, 変数名)
sl.SetCellValue("A1", "font change");
SLStyle style = sl.CreateStyle();
style.SetFont("Meiryo UI", 20);
style.Font.Underline = UnderlineValues.Double;
sl.SetCellStyle("A1", style);
設定したフォントオプションで表示されます。
セルのフォントスタイル取得
セルに適用されたフォントスタイルを取得することも可能です。
SLStyle 変数名 = オブジェクト名.GetCellStyle(“スタイルを取得する行列”);
オブジェクト名.SetCellStyle(“スタイルを適用する行列”, 変数名);
SLStyle style = sl.CreateStyle();
style.SetFont("Meiryo UI", 20);
sl.SetCellStyle("A1", style);
sl.SetCellValue("A1", "font style");
style = sl.GetCellStyle("A1");
sl.SetCellStyle("A3", style);
sl.SetCellValue("A3", "font style");
「A1」のセルのフォントスタイルが「A3」のセルに適用されます。
セルの値を取得
セルに入力されているデータを取得する場合は、GetCellValueAsxxxxを使用します。xxxxには取得したい型を選択します。セルの表示形式は通常「標準」なので型はstring型でいいでしょう。
string 変数名 = オブジェクト名.GetCellValueAsString(“データを取得する行列”);
sl.SetCellValue("A1", "Hello World");
var str = sl.GetCellValueAsString("A1");
sl.SetCellValue("A3", str);
「A1」で取得したセルの文字列が「A3」のセルへ書き込みされます。
セルの罫線を設定
罫線の種類は、実線や点線、太線等があり、BorderStyleプロパティで設定します。罫線の色は、Colorプロパティで設定します。
SLStyle 変数名 = オブジェクト名.CreateStyle();
変数名.Border.xxxBorder.BorderStyle = BorderStyleValues.Thin;
変数名.Border.xxxBorder.Color = System.Drawing.Color.Black;
オブジェクト名.SetCellStyle(“行列”, 変数名);
SLStyle style = sl.CreateStyle();
//罫線の形式を設定
style.Border.TopBorder.BorderStyle = BorderStyleValues.Thin;
style.Border.LeftBorder.BorderStyle = BorderStyleValues.Thin;
style.Border.RightBorder.BorderStyle = BorderStyleValues.Thin;
style.Border.BottomBorder.BorderStyle = BorderStyleValues.Thin;
// 罫線の色を設定
style.Border.BottomBorder.Color = System.Drawing.Color.Black;
style.Border.TopBorder.Color = System.Drawing.Color.Black;
style.Border.LeftBorder.Color = System.Drawing.Color.Black;
style.Border.RightBorder.Color = System.Drawing.Color.Black;
sl.SetCellStyle("B2", style);
「B2」セルの上下左右に罫線が引かれます。
ワークシートの保存
ワークシートの保存は簡単で、SaveAsにファイル名を指定すれば保存できます。ファイル名だけでなく、ファイルのパスを設定することができます。
オブジェクト名.SaveAs(“ファイル名”);
sl.SetCellValue("A1", "Hello World");
sl.SaveAs(@"C:\Sample.xlsx");
使用例の紹介
ここでは、「SpreadsheetLight」ライブラリでアプリケーションのサンプルを紹介します。気になる記事があればリンクからアクセスして参考にしてみてください。




まとめ
パソコンにエクセルのインストールが不要で、エクセルの制御ができるライブラリ「SpreadsheetLight」について解説をしました。エクセルの書き込みや読み込みなどよく使用する操作を簡単に実装できる便利なライブラリです。
C#でエクセルを操作できるようになれば、帳票の出力やデータ収集の自動化などなど業務を効率化する手段として活躍ができることでしょう。

もしライブラリを使用する機会があれば、今回の記事が参考になれば幸いです。
以上、最後まで読んでいただきありがとうございました。
コメント