Используйте имена именованных диапазонов в формуле в Epplus - PullRequest
0 голосов
/ 08 сентября 2018

Я использую Epplus в приложении .NET Core и хотел бы использовать имена именованных диапазонов в формулах.Проблема заключается в том, что когда я ссылаюсь на именованный диапазон, он принимает значение первой ячейки в диапазоне и не перебирает строки:

    var data = new List<object[]>()
{
    new object[] {"Hours", "Price", "Total"},
    new object[] {0.5, 10, 0},
    new object[] {2, 100, 0},
    new object[] {3, 20, 0}
};

using (var package = new ExcelPackage())
{
    var sheet = package.Workbook.Worksheets.Add("Variables");
    sheet.Cells["A1"].LoadFromArrays(data);

    sheet.Names.Add("Hours", sheet.Cells["A2:A4"]);
    sheet.Names.Add("Price", sheet.Cells["B2:B4"]);
    sheet.Names.Add("Total", sheet.Cells["C2:C4"]);

    sheet.Names["Total"].Formula = "Hours * Price";

    package.Workbook.Calculate();

    for (int i = 1; i <= sheet.Dimension.End.Row; i++)
    {
        Console.WriteLine($"{sheet.Cells[i, 1].Value}\t{sheet.Cells[i, 2].Value}\t{sheet.Cells[i, 3].Value}");
    }
}

Этот код записывает в консоль следующее:

Hours   Price   Total
0,5     10      5
2       100     5
3       20      5

Но на самом деле я хотел бы получить это:

Hours   Price   Total
0,5     10      5
2       100     200
3       20      60

Можно ли как-то сделать это, используя имена в качестве аргументов вместо адресов ячеек, например, "Часы * Цена"?

1 Ответ

0 голосов
/ 28 сентября 2018

EPPlus Calculate() не поддерживает именованные диапазоны в формулах. Но если ваша консоль выводится только для теста, формулы рассчитываются правильно, если вы сохраните файл и откроете его. То есть если вы добавите using (var package = new ExcelPackage(new FileInfo(someFileName))) и package.Save(); внутри оператора using.

Вывод на консоль будет корректным, если ваша формула использует адреса ячеек (но, думаю, этого недостаточно):

for (int col = 2; col < 5; col++)
    sheet.Cells[$"C{col}"].Formula = $"A{col} * B{col}";
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...