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

C# EPPLUS excel array formula workarounds

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

使用CreateFormulaArray()方法时,excel公式编辑器中会出现正确的公式字符串。但是,该公式实际上并未在 sheet.

上执行

我想知道是否有人知道无需使用 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:$C)*SQRT(8*260)");
}

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

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

您可以做以下两件事之一。您可以使用旧版本的函数:

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

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

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