通过epplus在excel中调用公式

dot*_*ner 15 c# excel asp.net-mvc-4 epplus

我在ASP.NET MVC4 C#项目中有一个excel表,我能够使用EPPlus成功读取excel表.现在,我希望能够将2个数字传递到单元格C:2和C:3,并且能够在C:4中调用公式,即= SUM(C2:C3).

所以从C#我想传入4和6并调用公式,并能够从C:4得到结果,即40(SUM为10和30).我如何在C#中实现这一目标.

在下面的代码中,我为d.Average返回零

d.Average = Convert.ToDouble(currentWorksheet.Cells["C4"].Value);
Run Code Online (Sandbox Code Playgroud)

这是我在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);
        }
Run Code Online (Sandbox Code Playgroud)

ogb*_*tad 20

跳过=公式字符串.

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

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


Dei*_*lan 11

从EpPlus 4.0.1.1开始,有一种扩展方法Calculate(this ExcelRangeBase range).在访问Value属性之前调用它:

currentWorksheet.Cells["C4"].Calculate();
Run Code Online (Sandbox Code Playgroud)

并且currentWorksheet.Cells["C4"].Value将返回的预期值40之后.


Pat*_*man 0

我正在回顾我之前的答案,发现EPPLUS的计算引擎仍在开发中。

请参阅CodePlex 上的讨论。(自 2011 年起)

路线图页面的引用:

3.2版本

公式解析器、计算引擎

使用 DotNetZip 替换 Package API

新的单元存储可改善插入、删除性能和内存消耗

最后编辑于 2013 年 2 月 14 日