EPPlus配方不能在没有调用计算的情况下工作

我试过在excel INDEX和MATCH中使用两个函数,根据EPPlus codeplex,应该支持这两个函数。 每次我打开文件,都会有一个警告信息,说有什么东西坏了,问我是否要重新打印文件,打开时,所有的公式都不见了。 在修复文档时,会显示一个对话框,表明该公式已从/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只是一个看起来像这样的模板

在这里输入图像说明

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

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

 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中input分号时,MS会即时修正公式。 实际的XML可能需要逗号,但我不确定。

正确答案由reasra(我不能评论)。 这是在此页面上的“一些常见错误”中logging的:

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

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