Я пытался использовать две функции в Excel: ИНДЕКС и MATCH и в соответствии с кодексом EPPlus они должны быть поддерживается. Каждый раз, когда я открываю файл, появляется предупреждающее сообщение о том, что что-то сломано, и спрашивает, хочу ли я восстановить документ, а когда он открывается, все формулы исчезают. При восстановлении документа отображается диалоговое окно о том, что формула была удалена из /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 — это просто шаблон, который выглядит так
Итак, что я делаю неправильно здесь?
"INDEX($C$1:$D$24,4,2)"
будет работать нормально. - person UndeadBob   schedule 23.03.2017