1

我尝试在 excel INDEXMATCH中使用两个函数,根据EPPlus codeplex,应该支持这些函数。每次我打开文件时,都会有一条警告消息说有东西坏了,并询问我是否要修复文件,当它打开时,所有公式都消失了。修复文档时,会显示一个对话框,说明公式已从/xl/worksheets/sheet1.xml-del.

我可以将公式手动放入电子表格中并且它们可以工作,但是要在生成的 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 只是一个看起来像这样的模板

在此处输入图像描述

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

4

2 回答 2

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 可能需要逗号,但我不确定。

于 2017-03-23T15:26:29.180 回答
1

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

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

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