はじめに
C#で使える無料のExcelライブラリ、「SpreadsheetLight」でExcelにグラフ(チャート)を挿入する方法について解説します。少ないコードで簡単に挿入することが出来ます。
実行結果
後述のコードを実行すると、以下の棒グラフ付のエクセルが作成されます。
全体コード
棒グラフ付のエクセルファイルを出力するコードです。
前半は、前回解説した「表を作成するコード」をそのまま使っています。
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;
using SpreadsheetLight.Charts;
namespace ConsoleAppSpreadsheetLight2
{
class Program
{
static void Main(string[] args)
{
SLDocument sl = new SLDocument();
// 項目名称を入力します
sl.SetCellValue("A1", "氏名");
sl.SetCellValue("B1", "スコアA");
sl.SetCellValue("C1", "スコアB");
sl.SetCellValue("D1", "スコアC");
sl.SetCellValue("E1", "スコア合計");
// 氏名の内容を入力します
sl.SetCellValue("A2", "田中");
sl.SetCellValue("A3", "鈴木");
sl.SetCellValue("A4", "山田");
// 各人のスコアを入力します
for (int i = 2; i < 2 + 3; i++) { sl.SetCellValue(2, i, i * 10); }
for (int i = 2; i < 2 + 3; i++) { sl.SetCellValue(3, i, i * 20); }
for (int i = 2; i < 2 + 3; i++) { sl.SetCellValue(4, i, i * 30); }
// 各人の合計のため、SUM関数を入力します。
// ライブラリの機能を使って、行・列の番号から、A1:A5 のような「範囲の文字列」に変換します
string range1 = SLConvert.ToCellRange(2, 2, 2, 4);
string range2 = SLConvert.ToCellRange(3, 2, 3, 4);
string range3 = SLConvert.ToCellRange(4, 2, 4, 4);
// SUM関数を入力します
sl.SetCellValue(2, 5, "=SUM(" + range1 + ")");
sl.SetCellValue(3, 5, "=SUM(" + range2 + ")");
sl.SetCellValue(4, 5, "=SUM(" + range3 + ")");
// グラフ(チャート)オブジェクトを生成します
SLChart chart;
// オプション設定用です
SLCreateChartOptions option = new SLCreateChartOptions();
// 行の内容を系列にするように設定します
option.RowsAsDataSeries = true;
// グラフにするデータの範囲と、オプション設定します
chart = sl.CreateChart("A1", "E4", option);
// 棒グラフを設定します
chart.SetChartType(SLColumnChartType.ClusteredColumn);
// グラフの大きさを指定します( top, left, buttom, rightの順です)
chart.SetChartPosition(5, 2, 20, 8);
// グラフをエクセルに挿入します
sl.InsertChart(chart);
// ファイル名を指定して保存します。
sl.SaveAs("SpreadsheetLightTest.xlsx");
// 終了待ちです。
Console.WriteLine("End of program");
Console.ReadLine();
}
}
}
コードのポイント
全体コード内の、グラフ表示関連の部分をポイントとして解説します。
※下記で紹介していないオプション設定については、本家サイトの「Exsample」の「Extensive documentation」と表示されている、.chmファイル(DL形式のヘルプ)で確認することが出来ます。
グラフのオプション設定
以下のコードで、グラフのオプションを設定します。
今回はグラフの「行方向」を系列として使いたかったので、RowsAsDataSeriesをTrueに設定しています。
// オプション設定用です
SLCreateChartOptions option = new SLCreateChartOptions();
// 行の内容を系列にするように設定します
option.RowsAsDataSeries = true;
データの範囲・グラフの種類の選択
以下のコードで、「グラフにしたいデータの範囲」と「グラフの種類」を設定します。
CreateChart()の引数で、グラフにしたいデータの範囲を(項目も含めて)指定します。また、オプションを指定したい場合もこの関数で設定します。
SetChartType() の引数で、グラフの種類を設定します(今回はColumnChart:縦棒グラフ)
// グラフにするデータの範囲と、オプション設定します
chart = sl.CreateChart("A1", "E4", option);
// 棒グラフを設定します
chart.SetChartType(SLColumnChartType.ClusteredColumn);
グラフのサイズ設定と挿入
以下のコードで、挿入するグラフの大きさの設定とグラフの挿入を設定します。
( 位置の単位は未調査(セルの数?)です、適宜表示結果に合わせて修正してしください )
最後に、コード冒頭で作成したエクセルのオブジェクト(sl) に 上述したグラフのオブジェクトを設定せればグラフの挿入は完了です。
// グラフの大きさを指定します( top, left, buttom, rightの順です)
chart.SetChartPosition(5, 2, 20, 8);
// グラフをエクセルに挿入します
sl.InsertChart(chart);
まとめ
C#で使える無料の最新Excelライブラリ「SpreadsheetLight」で、Excelにグラフ(チャート)を挿入する方法について解説しました。お役に立てばうれしいです。
お知らせ
今月号のSoftware Designは「もっとTypeScriptの力を引き出そう」
JavaScriptの拡張言語でしょ?と思っているかたへ、Union型などTypeScriptの持つ秘めたる力を解説する特集となっています。
個人的には第2特集の「Ubuntuの現代的な使い方」がの方が気になりました。より詳しい内容は以下のリンクからご覧ください。
同じ27インチで1.8倍の情報量
Excelで大量のデータを扱うなら、高解像度のディスプレイが絶対おすすめです。WQHD対応モニターなら、同サイズのフルHDと比べて1.8倍の情報量。解像度も高いので目にもやさしいです。30%オフなので私も仕事用に買いました。
罫線を引くこともできます
SpreadsheetLightは、エクセル内に罫線を引くこともできます。興味のある方は以下もご覧ください。
質問・要望 大歓迎です
「こんな解説記事作って」「こんなことがしたいけど、〇〇で困ってる」など、コメント欄で教えてください。 質問・要望に、中の人ができる限り対応します。
使えたよ・設定できたよの一言コメントも大歓迎。気軽に足跡を残してみてください。記事を紹介したい方はブログ、SNSにバシバシ貼ってもらってOKです。