ASP.NET MVC4 C#プロジェクトにExcelシートがあり、EPPlusを使用してExcelシートから正常に読み取ることができます。今度は、セルC:2とC:3に2つの数値を渡し、C:4の数式(= SUM(C2:C3))を呼び出せるようにしたいと思います。
したがって、C#から4と6を渡して式を呼び出し、C:4から結果を40(10と30の合計)で取得できるようにする必要があります。 C#でそれを実現するにはどうすればよいですか。
次のコードでは、d.Averageのゼロを返します
d.Average = Convert.ToDouble(currentWorksheet.Cells["C4"].Value);
行をトラバースするための、これまでのc#のコードは次のとおりです。
using (var package = new ExcelPackage(existingFile))
{
ExcelWorkbook workBook = package.Workbook;
var currentWorksheet = workBook.Worksheets.First();
currentWorksheet.Workbook.CalcMode = ExcelCalcMode.Automatic;
currentWorksheet.Cells["C4"].Formula = "=SUM(C2:C3)";
currentWorksheet.Cells["C2"].Value = 10;
currentWorksheet.Cells["C3"].Value = 30;
package.Save();
}
using (var package = new ExcelPackage(existingFile))
{
ExcelWorkbook workBook = package.Workbook;
var currentWorksheet = workBook.Worksheets.First();
d.Average = Convert.ToDouble(currentWorksheet.Cells["C4"].Value);
}
式文字列の_=
_をスキップします。
置換currentWorksheet.Cells["C4"].Formula = "=SUM(C2:C3)";
と
currentWorksheet.Cells["C4"].Formula = "SUM(C2:C3)";
EpPlus 4.0.1.1以降、拡張メソッドCalculate(this ExcelRangeBase range)
があります。 Value
プロパティにアクセスする前に呼び出します:
currentWorksheet.Cells["C4"].Calculate();
そしてcurrentWorksheet.Cells["C4"].Value
はその後に40
の期待値を返します。
私は以前の答えをレビューしていて、EPPLUSの計算エンジンがまだ開発中であることがわかりました。
CodePlexの このディスカッション を参照してください。 (2011年以降)
ロードマップページからの引用:
バージョン3.2
式パーサー、計算エンジン
Package APIをDotNetZipに置き換える
挿入、削除のパフォーマンスとメモリ消費を改善する新しいセルストア
最終編集日:2013年2月14日