C#EPPLUS excel数组公式解决方案

本文关键字:解决方案 数组 excel C#EPPLUS | 更新日期: 2023-09-27 18:21:33

当前版本的EPPLUS支持创建excel公式,但不支持创建excel数组公式,尽管有CreateFormulaArray()方法。

使用CreateFormulaArray()方法时,excel公式编辑器中将显示正确的公式字符串。但是,该公式实际上并没有在图纸上执行。

我想知道是否有人知道任何聪明的解决方法,而不必使用Microsoft.Office.Interop

我的代码是:

using (ExcelPackage pck = new ExcelPackage(newFile))
{
    pck.Workbook.Worksheets.Add("Summary");
    pck.Workbook.Worksheets.MoveToStart("Summary");
    var summaryWS = pck.Workbook.Worksheets[1];
    summaryWS.Cells["C2"].Value = 2;
    summaryWS.Cells["C3"].Value = 3;
    summaryWS.Cells["C4"].Value = 8;
    summaryWS.Cells["A1"].CreateArrayFormula("STDEV.P($C$2:$C$4)*SQRT(8*260)");
}

我在excel中的输出为#NAME?
公式编辑器将显示{=STDEV.P($C$2:$C$4)*SQRT(8*260)}

C#EPPLUS excel数组公式解决方案

Excel似乎误解了函数名STDEV.P,它是STDEVP的新版本。如果您查看wb EPPlus生成的excel打开并保存后的XML输出,您会看到它显示_xludf.STDEV.P,这意味着它认为它是用户定义的。

你可以做两件事中的一件。你可以使用旧版本的功能:

summaryWS.Cells["A1"].CreateArrayFormula("STDEVP($C$2:$C$4)*SQRT(8*260)");

这可能不太理想,因为你总是想坚持使用最新版本。在这种情况下,强制excel识别如下函数:

summaryWS.Cells["A1"].CreateArrayFormula("_xlfn.STDEV.P($C$2:$C$4)*SQRT(8*260)");