【问题标题】:Validate column with Excel formula increments the formula is expected behavior or bug?验证列与 Excel 公式增量公式是预期的行为或错误?
【发布时间】: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}";

【问题讨论】:

    标签: c# .net epplus


    【解决方案1】:

    我想我不太擅长 Excel 公式。

    改变这一行:

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

    到这里:

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

    停止了自动递增问题。希望这个答案可以帮助其他人保持理智,因为我自己在这个问题上浪费了半天时间。

    【讨论】:

    • 一般来说,在处理列表时需要使用绝对引用(带 $)(更好的是,使用命名范围)。我对这些情况的建议是在 excel 中解决问题,保存文件,然后将其加载到 epplus(或您正在使用的 whataver excel 包)中。检查您要处理的属性将教您 Excel 的处理方式,这将是一个有价值的学习工具
    • @GianPaolo 这正是我得出这个结论的原因。我只希望我早点想到它。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-02-06
    • 1970-01-01
    • 1970-01-01
    • 2017-12-17
    • 2014-12-16
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多