使用 Excel 公式递增验证列 公式是预期行为还是错误?

Validate column with Excel formula increments the formula is expected behavior or bug?

我正在尝试创建一个跨页sheet,其中第一个 sheet ("Catalog") 在一列中包含一些预填值和一些空值。我希望这些值位于一个下拉列表中,该列表仅限于在第二个 sheet ("Products") 中找到的值。

我希望如果我将 "Catalog" sheet 中单元格 "A1:A1048576" 的 Excel 验证公式设置为 [=26= 的列表验证] 每个单元格只允许来自 "Products!A1:A100" 的值。但是,我发现我的公式在 "Catalog" sheet 中的每一行都会递增(即在第 2 行中公式变为 "Products!A2:A101",在第 3 行中公式变为 "Products!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}";

我想我不太擅长 Excel 公式。

更改此行:

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

对此:

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

解决了自动递增问题。希望这个答案能为其他人节省一些理智,因为我自己在这个问题上浪费了半天时间。