【发布时间】:2018-03-02 09:13:32
【问题描述】:
我使用 EPPlus 生成一个包含大量下拉列表的电子表格。 使用以下代码生成下拉列表:
private void SetDropDown(string destColumn, int row, string selectedValue,
IEnumerable<string> options)
{
int colNum = GetColumnNumByLetter(destColumn);
var dropDown = _sheet.Cells[row,colNum].DataValidation.AddListDataValidation();
dropDown.ShowErrorMessage = false;
options.ForEach(x=>dropDown.Formula.Values.Add(x));
_sheet.Cells[row, colNum].Value = selectedValue;
}
我们在测试期间发现了一个严重的性能问题 - 调用 ExcelPackage.Save() 需要 3 秒以上的时间来处理 50 行工作表,而调用 100 行工作表需要超过 10 秒。我开始研究源代码并注意到 EPPlus 在Save() 调用上执行数据验证。当我删除对AddListDataValidation 的调用和随后的 2 行时,我得到了巨大的性能提升:100 行耗时不到 0.09 秒。
所以,问题是:
有没有办法在没有 ExcelDataValidationList 的情况下创建下拉列表?
有没有办法创建自定义验证器并覆盖验证逻辑(根本不对列表进行任何验证)以加快电子表格的保存速度?
有没有办法在保存时禁用电子表格验证?
【问题讨论】: