C#からExcelファイルにデータを書き込みして、グラフを表示したいことがある場合に使えるのが「SpreadsheetLight」です。
Excelの読み書きするライブラリをして、CLosed XML、NPOIなどが有名ですが、SpreadsheetLightもExcelに特化した扱いやすいライブラリです。また、他のライブラリ同様にOfficeがインストールされていなくてもExcelファイルが作成できるという特徴があります。
この記事ではグラフの挿入ができるSpreadsheetLightライブラリを利用して、Excel上にある表を折れ線グラフで表示する方法についてご紹介します。
折れ線グラフではなく、棒グラフをExcelに挿入したい場合はこちらの記事を参考にしてみてください。

SpreadsheetLightについて
Microsoftが提供するExcel(2007以降)およびLibreOffice Calcと互換性があるオープンソースのライブラリです。無料で利用できるMITライセンスで商用利用も可能です。
Excelに依存せず独自エンジンで動作するので、エクセルがなくても動かすことができます。Officeのインストールが不要というのは大きなメリットの1つでしょう。
このライブラリはNuGetでインストールすることが可能です。インストールの方法や使用方法についてはこちらの記事で紹介しますので、参考にしてみてくださいね。

ここからはライブラリーのインストールが完了していることを前提に進めていきます。
Excelの作成と表データの書き込み
Excelに表がないとグラフを表示することはできませんので、Excelの新規作成を行った後に表を書き込みします。
書き込む表データは何でもいいのですが、今回は東京の最高気温と最低気温にします。2021年11月1日~11月14日までの2週間分をグラフ化してみましょう。
private void SetRecordValue(SLDocument sl)
{
DataTable table = new DataTable("東京の気温");
// カラム名の追加
table.Columns.Add("日付");
table.Columns.Add("最高気温", Type.GetType("System.Double"));
table.Columns.Add("最低気温", Type.GetType("System.Double"));
// Rows.Addメソッドを使ってデータを追加
table.Rows.Add("11月1日", 21.4, 12.4);
table.Rows.Add("11月2日", 21.9, 15.7);
table.Rows.Add("11月3日", 22.1, 13.5);
table.Rows.Add("11月4日", 20.3, 11.6);
table.Rows.Add("11月5日", 20.3, 11.5);
table.Rows.Add("11月6日", 19.6, 10.6);
table.Rows.Add("11月7日", 19.2, 12.2);
table.Rows.Add("11月8日", 21.5, 12.7);
table.Rows.Add("11月9日", 19.8, 14.2);
table.Rows.Add("11月10日", 20.9, 13.6);
table.Rows.Add("11月11日", 20.7, 10.8);
table.Rows.Add("11月12日", 21.5, 9.7);
table.Rows.Add("11月13日", 18.4, 8.6);
table.Rows.Add("11月14日", 19.6, 8.9);
// セルのデータ入力
sl.ImportDataTable("B2", table, true);
sl.SetCellValue("B1", "東京の気温");
sl.SetCellValue("D1", "(単位 ℃)");
// セルの書式設定
SLStyle style = null;
style = sl.CreateStyle();
sl.SetColumnWidth(2, 4, 12);
style.SetTopBorder(BorderStyleValues.Thin, System.Drawing.Color.Black);
style.SetBottomBorder(BorderStyleValues.Thin, System.Drawing.Color.Black);
style.SetLeftBorder(BorderStyleValues.Thin, System.Drawing.Color.Black);
style.SetRightBorder(BorderStyleValues.Thin, System.Drawing.Color.Black);
sl.SetCellStyle("B2", "D16", style);
style = sl.CreateStyle();
style.SetBottomBorder(BorderStyleValues.Double, System.Drawing.Color.Black);
style.Fill.SetPatternType(PatternValues.Solid);
style.Fill.SetPatternForegroundColor(System.Drawing.Color.FromArgb(215, 228, 242));
sl.SetCellStyle("B2", "D2", style);
}
テーブルデータのカラム名を定義する際に、テーブルに入力されるデータ型をType.GetType()で選択する必要があります。ここのデータ型の設定が間違えていると、小数点を入力したいのに整数になってしまうので注意が必要です。ここでは小数点を含む数値を扱うので、Type.GetType(“System.Double”)で64ビット浮動小数にします。
DataTableをインポートするには、SLDocumentクラスのImportDataTableメソッドでExcelに書き込みをします。

ここでは体裁を整える為に、罫線を引いたり背景色を変更するなどセルの書式設定を行っています。
折れ線グラフを表示
東京の気温データを元に折れ線グラフを表示してみましょう。
SpreadsheetLightでチャートを表示するには名前空間「SpreadsheetLight.Charts」を宣言してグラフ化するデータの範囲やグラフの種類、グラフの大きさ等を設定します。
private void SetBarChart(SLDocument sl)
{
// 元データの範囲選択
SLChart chart = sl.CreateChart("B2", "D16");
// 折れ線グラフを選択
chart.SetChartType(SLLineChartType.Line);
// グラフのサイズ設定
chart.SetChartPosition(2, 6, 32, 22);
// オプションの設定
SLDataSeriesOptions seriesOptions = null;
seriesOptions = chart.GetDataSeriesOptions(1); // 折れ線グラフのカスタマイズ(最高気温)
seriesOptions.Marker.Symbol = DocumentFormat.OpenXml.Drawing.Charts.MarkerStyleValues.Circle; // マーカーの種類
seriesOptions.Marker.Size = 5; // マーカーの大きさ
seriesOptions.Line.SetSolidLine(System.Drawing.Color.OrangeRed, 0); // ラインの色
chart.SetDataSeriesOptions(1, seriesOptions);
seriesOptions = chart.GetDataSeriesOptions(2); // 折れ線グラフのカスタマイズ(最低気温)
seriesOptions.Marker.Symbol = DocumentFormat.OpenXml.Drawing.Charts.MarkerStyleValues.Circle; // マーカーの種類
seriesOptions.Marker.Size = 5; // マーカーの大きさ
seriesOptions.Line.SetSolidLine(System.Drawing.Color.CornflowerBlue, 0); // ラインの色
chart.SetDataSeriesOptions(2, seriesOptions);
// グラフの挿入
sl.InsertChart(chart);
}
グラフの設定
まずは「グラフとなる元データの範囲」と「グラフの種類」を設定します。
「グラフとなる元データの範囲」は、CreateChartメソッドでグラフにしたいデータの範囲と項目名を含めて指定します。
SLChart chart = SLDocument.CreateChart(範囲選択する左上のセル, 範囲選択する右下のセル)
chart.SetChartType(チャートの種類を選択);
SLChart chart = sl.CreateChart("B2", "E49");
chart.SetChartType(SLColumnChartType.ClusteredColumn);
上記の例だと、「G3」~「V32」の範囲にグラフができることになります。
「グラフの種類」は、SetChartTypeメソッドでグラフの種類を指定します。
縦棒グラフ | SLColumnChartType.ColumnChart |
面グラフ | SLAreaChartType.Area |
バブルチャート | SLBubbleChartType.Bubble |
棒グラフ | SLBarChartType.ClusteredBar |
折れ線グラフ | SLLineChartType.Line |
円グラフ | SLPieChartType.PieOfPie |
レーダーチャート | SLRadarChartType.Radar |
散布図 | SLScatterChartType.ScatterWithStraightLines |
グラフ別にEnumで定義されているので、その定義された中からお好みのグラフを選択します。ここではSLLineChartTypeで定義されている「StackedLine」を使用していますに「グラフのサイズ」を設定します。SetChartPositionメソッドにグラフの上下左右(4隅のセル)の位置を指定します。
オプションの設定
棒グラフの色を変更する為に、SLDataSeriesOptionsでカスタマイズをします。変更をしたい要素のインデックスをGetDataSeriesOptionsメソッドの引数として渡します。
あとはLineプロパティを呼び出してSetSoidLineメソッドで好みの色を指定することで変更が可能です。
グラフの追加
グラフの設定とオプションの設定が完了したら、「グラフを追加」しましょう。追加は簡単でInsertChartメソッドに設定した情報を引数で渡すだけです。
SLDocument.InsertChart(設定済みのグラフオブジェクト);
sl.InsertChart(chart);
これでグラフの表示ができるようになりました。
実行
プログラムを実行してみましょう。
public partial class MainWindow : Window
{
public MainWindow()
{
InitializeComponent();
Loaded += (Sender, e) =>
{
SLDocument sl = new SLDocument();
// 元データ作成
SetRecordValue(sl);
SetBarChart(sl);
// ファイルを保存
sl.SaveAs("Sample.xlsx");
};
}
}
アプリを起動してみましょう。アプリケーションがあるフォルダ内部に「Sample.xlsx」という名前でエクセルファイルが出力されたはずです。
エクセルファイルをダブルクリックして起動すれば、下図のようなグラフが作成されます。エクセルがインストールされていないなら、LibreOffice Calcをインストールして開きましょう。

これでグラフの作成は完了です。
まとめ
C#でExcelのインストールが不要であるライブラリ「SpreadsheetLight」を使用して、Excelファイルへ折れ線グラフを表示する方法について解説しました。
折れ線グラフ以外にもさまざまなチャートを表示することができますので、色々と試してみるといいでしょう。
グラフの作成以外の使用例を紹介していますので参考になれば幸いです。


以上、最後まで読んでいただきありがとうございました。

プログラミングスキルを身に付けるなら、プログラミングを効率良く学べる
「プログラミングスクール」がオススメです。
特にこんな方にオススメ!!
これからエンジニアを目指したい
プログラミングの専門性を高めたい
プログラミングを学んで副業をしたい
エンジニアに転職して年収をアップさせたい
プログラミングを触ったことがない未経験からでも、プログラミングスクールで学習すれば、エンジニアへ就職・転職することも可能です。
あなたの「行動力」と「やる気」で、あなたの人生を大きく変えるチャンスになることでしょう。
プログラミングスクールに興味がある方は是非チェックしてみてください。