web-dev-qa-db-ja.com

epplusを介してExcelで数式を呼び出す

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);
        }
16

式文字列の_=_をスキップします。

置換currentWorksheet.Cells["C4"].Formula = "=SUM(C2:C3)";

currentWorksheet.Cells["C4"].Formula = "SUM(C2:C3)";

21
ogborstad

EpPlus 4.0.1.1以降、拡張メソッドCalculate(this ExcelRangeBase range)があります。 Valueプロパティにアクセスする前に呼び出します:

currentWorksheet.Cells["C4"].Calculate();

そしてcurrentWorksheet.Cells["C4"].Valueはその後に40の期待値を返します。

11
Deilan

私は以前の答えをレビューしていて、EPPLUSの計算エンジンがまだ開発中であることがわかりました。

CodePlexの このディスカッション を参照してください。 (2011年以降)

ロードマップページからの引用:

バージョン3.2

式パーサー、計算エンジン

Package APIをDotNetZipに置き換える

挿入、削除のパフォーマンスとメモリ消費を改善する新しいセルストア

最終編集日:2013年2月14日

0
Patrick Hofman