Проверка столбца с помощью формулы Excel увеличивает формулу ожидаемого поведения или ошибки? - PullRequest
0 голосов
/ 01 мая 2019

Я пытаюсь создать электронную таблицу, где первый лист («Каталог») содержит некоторые предварительно заполненные и некоторые пустые значения в столбце.Я хочу, чтобы значения были в выпадающем списке, которые ограничены значениями, найденными на втором листе («Продукты»).

Я ожидал бы, что если я задам формулу проверки 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}";

1 Ответ

0 голосов
/ 01 мая 2019

Полагаю, я не очень разбираюсь в формулах Excel.

Изменение этой строки:

productValidation.Formula.ExcelFormula = $"Products!A1:A{productCount}";

к этому:

productValidation.Formula.ExcelFormula = $"Products!$A$1:$A${productCount}";

остановлена ​​проблема автоинкремента. Надеюсь, этот ответ спасет кого-то еще в здравом уме, поскольку я сам потратил полдня на эту проблему.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...