有没有办法设置单元格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)
从 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 的以下功能:数组公式、相交运算符、对外部工作簿的引用。
| 归档时间: |
|
| 查看次数: |
6045 次 |
| 最近记录: |