有没有办法设置两者 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"
}
答案 0 :(得分:4)
从EpPlus 4.0.1.1开始,有一种扩展方法Calculate(this ExcelRangeBase range)
。调用它:
cell.Calculate();
之后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();
}
已知问题
EPPlus目前不支持Excel的以下功能 当谈到公式计算:数组公式,相交 运算符,对外部工作簿的引用。