在 EPPlus 中设置*两者*值和公式

And*_*ker 3 excel epplus

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

由于EPPlus不计算公式(它依赖excel来计算),所以我为用户预先计算结果。这样,如果他们不打开文件,而是重新上传文件,则“值”不为空。公式非常简单。

注意: sheet.SetValue().Value都重置类的 Formula 属性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"
}
Run Code Online (Sandbox Code Playgroud)

Dei*_*lan 5

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

cell.Calculate();
Run Code Online (Sandbox Code Playgroud)

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

更新

来自官方文档

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

已知的问题

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