Я пытаюсь создать электронную таблицу, где первый лист («Каталог») содержит некоторые предварительно заполненные и некоторые пустые значения в столбце.Я хочу, чтобы значения были в выпадающем списке, которые ограничены значениями, найденными на втором листе («Продукты»).
Я ожидал бы, что если я задам формулу проверки Excel для ячеек "A1: A1048576" на листе "Каталог", то это будет проверка списка "Products! A1: A100", которую каждая ячейка будет разрешать толькозначения из "Продукты! A1: A100".Однако я обнаружил, что моя формула увеличивается для каждой строки в листе «Каталог» (т. Е. В строке 2 формула становится «Продукты! A2: A101», а в строке 3 формула становится «Продукты! A3: A102»).
Если версия имеет значение, я использую EPPlus.Core v1.5.4 от NuGet.
Я не уверен, что это ошибка или я собираюсь применить свою формулу неправильно?
Я уже пытался напрямую применить проверку к каждой ячейке в столбце по одной ячейке за раз.Я обнаружил, что он не только умеренно увеличивает размер результирующего файла Excel, но, что более важно, он также экспоненциально увеличивает время, необходимое для создания файла Excel.Даже применение валидации по одной ячейке за первые 2000 строк более чем удваивает время генерации.
ExcelPackage package = new ExcelPackage();
int catalogProductCount = 10;
int productCount = 100;
var catalogWorksheet = package.Workbook.Worksheets.Add($"Catalog");
for (int i = 1; i <= catalogProductCount; i++)
{
catalogWorksheet.Cells[i, 1].Value = $"Product {i}";
}
var productsWorksheet = package.Workbook.Worksheets.Add($"Products");
for (int i = 1; i <= productCount; i++)
{
productsWorksheet.Cells[i, 1].Value = $"Product {i}";
}
var productValidation = catalogWorksheet.DataValidations.AddListValidation($"A1:A1048576");
productValidation.ErrorStyle = ExcelDataValidationWarningStyle.stop;
productValidation.ErrorTitle = "An invalid product was entered";
productValidation.Error = "Select a product from the list";
productValidation.ShowErrorMessage = true;
productValidation.Formula.ExcelFormula = $"Products!A1:A{productCount}";