2014-01-17 67 views
9

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

所以从C#我想传入4和6并调用公式,并能够从C:4返回40(SUM和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); 
     } 
+0

什么是d.FinalResult?你面临的问题是什么? –

回答

0

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

请参阅CodePlex上的this discussion。 (2011年建)

一个从路线图页面引用:

3.2版

公式解析器,计算引擎

与DotNetZip

新更换包装API cellstore imporve插入,删除性能和内存消耗

最后编辑2013年2月14日

+0

会尝试一下,让你知道帕特里克!谢谢。 –

+0

帕特里克这不起作用。 –

+0

你说得对。看到我更新的答案。 –

15

跳过在式字符串​​=

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

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

7

作为EpPlus 4.0.1.1的,有一个扩展方法Calculate(this ExcelRangeBase range)。访问Value属性之前调用它:

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

currentWorksheet.Cells["C4"].Value会后返回的40预期值。