【C#エクセル操作】ClosedXML – 単一、複数セルに値を書き込み
ClosedXMLを用いて 単一、複数セルに値を書き込む 方法を解説します
準備(usingの記述)
ClosedXMLを使うために書かなければいけない おまじない があります。
using ClosedXML.Excel; // ClosedXMLを使うためのおまじない
using ClosedXML.Excel.Drawings; // ClosedXMLを使うためのおまじない
おまじない を書く場所は プログラムの頭です。
※ NuGet による ClosedXMLライブラリ が追加してあることが前提です。
ライブラリの追加については こちら の記事を参考にしてください。
ClosedXMLライブラリ を追加してない状態で おまじないを書いたらエラーになります。
セルに値を書込み
C5セルに値「あいうえお」の書き込み(R1C1形式でセル指定)
// 値の書き込み(R1C1形式でセル指定)
wb.Worksheet("sheet1").Cell(5,3).Value = "あいうえお";
C5セルに値「あいうえお」の書き込み(A1形式でセル指定)
// 値の書き込み(A1形式でセル指定)
wb.Worksheet("sheet1").Cell("C5").Value = "あいうえお";
セルに数式を書込み
C5セルに数式「=1+1」の書き込み(R1C1形式でセル指定)
// 値の書き込み(R1C1形式でセル指定)
wb.Worksheet("sheet1").Cell(5,3).FormulaA1 = "=1+1";
C5セルに数式「=1+1」の書き込み(A1形式でセル指定)
// 値の書き込み(A1形式でセル指定)
wb.Worksheet("sheet1").Cell("C5").FormulaA1 = "=1+1";
ClosedXML 数式関連プロパティ一覧表
プロパティ名 | 説明 | 使用例 |
---|---|---|
FormulaA1 | A1形式でセルに数式を設定するときに使用します。 | wb.Worksheet("sheet1").Cell("C5").FormulaA1 = "SUM(A1:A10)"; |
FormulaR1C1 | R1C1形式でセルに数式を設定するときに使用します。 | wb.Worksheet("sheet1").Cell("C5").FormulaR1C1 = "SUM(R1C1:R10C1)"; |
Formula | セルに数式を設定するときに使用しますが、A1形式が一般的です。 | wb.Worksheet("sheet1").Cell("C5").Formula = "=SUM(A1:A10)"; |
SetFormulaA1 | メソッドチェーン中でA1形式の数式をセルに設定するために使用します。 | wb.Worksheet("sheet1").Cell("C5").SetFormulaA1("SUM(A1:A10)"); |
SetFormulaR1C1 | メソッドチェーン中でR1C1形式の数式をセルに設定するために使用します。 | wb.Worksheet("sheet1").Cell("C5").SetFormulaR1C1("SUM(R1C1:R10C1)"); |
数式をセルに設定する際には、FormulaA1
や FormulaR1C1
プロパティを使用します
FormulaA1
はExcelで一般的に使用されるA1参照スタイル(列はアルファベット、行は数字で表される)で数式を設定します
FormulaR1C1
はR1C1参照スタイル(列と行が両方とも数字で表される)で数式を設定します
SetFormulaA1
やSetFormulaR1C1
はメソッドチェーニングに適している点が特徴で、複数のスタイル設定を一行で行いたい場合に便利ですこれらのメソッドを使用すると、プロパティを設定する代わりにメソッドとして数式をセルに適用することができます。
例えば、以下のコードはcell
の数式をメソッドチェーンで設定しています。
wb.Worksheet("sheet1").SetFormulaA1("SUM(A1:A10)").Style.Font.Bold = true;
このコードはセルに数式を設定し、そのセルのフォントを太字に設定しています
オブジェクトのメソッドを連続して呼び出すプログラミングのパターン。この技法は「流れるようなインターフェース」(fluent interface) とも呼ばれ、コードの可読性を向上させることができる。
メソッドチェーニングを実現するには、各メソッドが最後にそのオブジェクト自身 (this
) を返すように実装されている必要があります。このために、メソッドはそのオブジェクトの型を返す必要があります。
複数セルに書込み
E1~E100セルに値「2」をセット
//E1~E100セルにまとめて値をセット
wb.Worksheet("sheet1").Range(1, 5, 100, 5).Value = 2;
E1~E100セルに数式「=1+1」をセット
値を文字列として読み出し
C5セルの値を文字列として取得(R1C1形式でセル指定)
// 文字列として取得(R1C1形式でセル指定)
var C5_Value = wb.Worksheet("sheet1").Cell(5, 3).Value.ToString();
C5セルの値を文字列として取得(A1形式でセル指定)
// 文字列として取得(A1形式でセル指定)
var C5_Value = wb.Worksheet("sheet1").Cell("C5").Value.ToString();