【ClosedXML】 数式を使用する
今回はClosedXMLで数式を扱う方法を説明します。
先ずはセルに数式を指定する方法を説明します。
セルに数式を代入するためにはFormulaA1プロパティ又はFormulaR1C1プロパティを使用します。
// 数式を指定する("="は省略可能) sheet.Cell("A4").Value = "=A1 + A2"; // 文字列扱い sheet.Cell("A5").FormulaA1 = "A1 + A2"; sheet.Cell("A6").FormulaA1 = "SUM(A1:A2)";サンプルコードの1行目のようにValueプロパティに数式を代入しても文字列扱いになり、数式として扱われません。(セルに"=A1 + A2"という文字列が代入されます。) 数式として代入するにはFormulaA1かFormulaR1C1プロパティに数式を指定します。 FormulaA1とFormulaR1C1はセルの指定方法が違うだけで使い方は同じです。 もちろん関数も使用可能です。 数式の計算結果が欲しい場合はセルのValueプロパティから取得できます。
// 数式の結果を使用する sheet.Cell("A7").Value = "計算結果:" + sheet.Cell("A6").Value;次にセルを使用せずに関数の計算結果を取得する方法を説明します。
var sum = XLWorkbook.EvaluateExpr("SUM(10, 20, 30)");XLWorkbookのEvaluateExprメソッドを使用すれば、Excel関数を使用した計算結果を取得することができます。 このメソッドを使用する場合はワークシートやセル等の値は使用できません。 SUM(A1:A3)の様に数式を指定しても、このメソッドからはセルA1がどこにあるのかわからない為です。 ワークシートやセルの値を使用したい場合はブックインスタンスやワークシートインスタンスのEvaluateメソッドを利用します。
/* * bookの情報を使って関数計算 * ワークシート名が日本語だと例外になるっぽい */ var sum1 = book.Evaluate("SUM(Sheet01!A1:A3)"); // sheetの情報を使って関数計算 var sum2 = sheet.Evaluate("SUM(A1:A3)");Evaluateメソッドの場合、bookやsheetに含まれるセルの値を使用することができます。 ただbook.Evalute()を使用する場合、シート名が日本語だと例外が発生するようです。 Evaluateメソッド使用する場合はシート名は英数字にしておいた方が安全です。 最後に、関数や数式を使用する場合はセル等の追加・削除に注意してください。 個人的には数式を扱う場合はセル等の追加・削除は一切行わないほうが安全かなと思っています。(
スポンサーサイト