【发布时间】:2019-05-01 11:16:22
【问题描述】:
我正在尝试创建一个电子表格,其中第一张工作表(“目录”)在一列中包含一些预填充的值和一些空值。我希望这些值位于下拉列表中,该列表仅限于在第二张表(“产品”)中找到的值。
我希望如果我将“目录”表中单元格“A1:A1048576”的 Excel 验证公式设置为“产品!A1:A100”的列表验证,每个单元格将只允许来自“产品!A1:A100"。但是,我发现我的公式在“目录”表中的每一行都会增加(即在第 2 行,公式变为“产品!A2:A101”,在第 3 行,公式变为“产品!A3:A102”) .
如果版本很重要,我使用的是 NuGet 的 EPPlus.Core v1.5.4。
我不确定这是一个错误还是我打算错误地应用我的公式?
我已经尝试将验证直接应用到列中的每个单元格,一次一个单元格。我发现它不仅适度地增加了生成的 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}";
【问题讨论】: