没有调用计算,EPPlus公式无法正常工作

时间:2017-03-23 12:32:00

标签: c# excel epplus epplus-4

我尝试在excel INDEXMATCH以及EPPlus codeplex, these should be supported中使用两个函数。每当我打开文件时,都会显示一条警告消息,说明某些内容已损坏,并询问我是否要重新记录该文档,当它打开时,所有公式都消失了。修复文档时,会显示一个对话框,说明该公式已从/xl/worksheets/sheet1.xml-del中删除。

我可以手动将公式放入spreedsheet并且它们可以工作,但是在生成的xlsx文件中显示任何数据的唯一方法是在工作表上调用Calculate()。这将正确输出数据,但我需要的是在文档中包含公式。

以下是我尝试过的公式的一个小例子

private byte[] TestingFormula()
{
    using (ExcelPackage pck = new ExcelPackage(_helper.GetTemplateStream("TEST.xlsx")))
    {
        var ws = pck.Workbook.Worksheets[1];

        ws.Cells["A4"].Formula = "INDEX($C$1:$D$24;4;2)";
        ws.Cells["A6"].Formula = "INDEX(C1:D24;6;2)";

        ws.Cells["B26"].Formula = "MATCH($B$12;$C$1:$D$1;0)";

        // sum works as expected
        //ws.Cells["D25"].Formula = "SUM(D2:D24)";

        //pck.Workbook.Calculate();
        //pck.Workbook.CalcMode = ExcelCalcMode.Automatic;
        return pck.GetAsByteArray();
    }
}
  

TEST.xlsx只是一个看起来像这样的模板

enter image description here

那么,我在这里做错了什么?

2 个答案:

答案 0 :(得分:2)

在公式中使用逗号而不是分号:

ws.Cells["A4"].Formula = "INDEX($C$1:$D$24,4,2)";
ws.Cells["A6"].Formula = "INDEX(C1:D24,6,2)";

ws.Cells["B26"].Formula = "MATCH($B$12,$C$1:$D$1,0)";

我猜测当你直接在Excel中输入分号时,MS会动态修复公式。实际的XML可能需要逗号,但我不确定。

答案 1 :(得分:0)

reasra的正确答案(我还不能发表评论)。这是在本页的“一些常见错误”中记录的:

https://epplus.codeplex.com/wikipage?title=About%20Formula%20calculation&referringTitle=Documentation

  • 不要使用本地化的函数名称。仅支持英文名称(例如SUM,IF,VLOOKUP等)。
  • 不要在函数参数之间使用分号作为分隔符。仅支持逗号。
  • 不要在公式中添加leading =符号。 “= SUM(A1:A2)”错误,“SUM(A1:A2)”是正确的