设置* both *值和& EPPlus中的公式

时间:2014-01-06 09:38:52

标签: excel epplus

有没有办法设置两者 Value&单元格的Formula属性,以便它们持久保存到写入的XLSX文件中?

由于EPPlus不计算公式(它依赖excel这样做),我正在为用户预先计算结果。这样,如果他们不打开文件,然后重新上传它,'value'不为null。公式非常简单。

注意: sheet.SetValue().Value都重置ExcelCell类的公式属性,因此必须先调用.Value。请参阅ExcelCell.SetRichText()的源代码,了解相关信息。

这几乎是测试用例中的确切代码:

var package = new ExcelPackage(); // and setup code
var sheet = package.Workbook.Worksheets.First(); 
sheet.Cells["A2"].Value = 10; 
sheet.Cells["A2"].Formula = "=A1 * 3";
// Cell is OK now.  shows both ".Value" and ".Formula"

using (var s = new MemoryStream()) { 
    package.Save(s);
    var newPackage = new ExcelPackage(s);
    var newSheet = newPackage.Workbook.Worksheets.First();
    var cell = newSheet.Cells["A2"];
    // cell.Value == null
    // cell.Formula = "=A1 * 3"
}

1 个答案:

答案 0 :(得分:4)

从EpPlus 4.0.1.1开始,有一种扩展方法Calculate(this ExcelRangeBase range)。调用它:

cell.Calculate();

之后cell.Value将返回预期结果。

<强>更新

来自the official documentation

  

EPPlus支持从版本4开始计算公式。这意味着   你可以让EPPlus计算公式中的公式结果   工作簿。

     

这是通过调用Calculate()方法完成的,该方法可用   工作簿,工作表和范围级别。当Calculate()被称为EPPlus时   将评估公式的结果并将结果存储为   单元格的价值 - 就像Excel一样。

示例

using(var package = new ExcelPackage(new FileInfo(@"c:\temp\tmp.xlsx")))
{
   // calculate all formulas in the workbook
   package.Workbook.Calculate();
   // calculate one worksheet
   package.Workbook.Worksheets["my sheet"].Calculate();
  // calculate a range
  package.Workbook.Worksheets["my sheet"].Cells["A1"].Calculate();
}

已知问题

  

EPPlus目前不支持Excel的以下功能   当谈到公式计算:数组公式,相交   运算符,对外部工作簿的引用。