Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/298.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 未调用Calculate时EPPlus公式不起作用_C#_Excel_Epplus_Epplus 4 - Fatal编程技术网

C# 未调用Calculate时EPPlus公式不起作用

C# 未调用Calculate时EPPlus公式不起作用,c#,excel,epplus,epplus-4,C#,Excel,Epplus,Epplus 4,我尝试在excel和中使用两个函数。每次我打开文件时,都会出现一条警告消息,说有东西坏了,并询问我是否要重新编写文档,当它打开时,所有公式都消失了。修复文档时,会显示一个对话框,说明公式已从/xl/worksheets/sheet1.xml del中删除 我可以手动将公式放入spreedsheet中,它们可以正常工作,但要获得生成的xlsx文件中显示的任何数据,唯一的方法是在工作表上调用Calculate()。这将正确输出数据,但我需要的是在文档中包含公式 这里有一个我尝试过的公式的小例子 pr

我尝试在excel和中使用两个函数。每次我打开文件时,都会出现一条警告消息,说有东西坏了,并询问我是否要重新编写文档,当它打开时,所有公式都消失了。修复文档时,会显示一个对话框,说明公式已从
/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中输入分号时,MS会动态修复公式。实际的XML可能需要逗号,但我不确定。

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

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

为什么您的公式使用分号而不是逗号?我还没有测试,但我认为
“索引($C$1:$D$24,4,2)”
可以很好地工作。使用我刚才复制的现有公式。使用逗号而不是分号实际上解决了这个问题,所以我猜ePlus不处理分号,只处理Excel。