使用VSTO C#对Excel单元格下拉列表中的列表项有任何限制吗

本文关键字:列表 任何限 VSTO Excel 下拉列表 单元格 使用 | 更新日期: 2023-09-27 17:59:06

我正在使用vsto创建excel加载项。我正在向一个单元格添加一个验证,并将其作为Dropdown。下拉列表的数据源位于另一列中。我正在使用此代码。

string values = string.Join(",", cellValuesArray);
cellRange.Validation.Delete();
               
cellRange.Validation.Add(Excel.XlDVType.xlValidateList, Excel.XlDVAlertStyle.xlValidAlertStop,
                         Excel.XlFormatConditionOperator.xlBetween, values , Type.Missing);
cellRange.Validation.InCellDropdown = true;

现在,如果cellValuesArray包含超过1200(大约)个项目,那么它会抛出一个错误,称

mscorlib.dll中出现"System.Runtime.InteropServices.COMException"类型的异常,但未在用户代码中处理

附加信息:HRESULT异常:0x800A03EC

如果项目数量较小(如600-700),则效果良好。我不知道如何解决这个问题。

那么,我如何以这样的方式添加验证,使我的下拉列表可以容纳超过1K条记录,或者可能远高于1K条?

使用VSTO C#对Excel单元格下拉列表中的列表项有任何限制吗

经过大量研究,我终于找到了解决方案。如果您想在excel单元格的下拉列表中获取大量数据,那么使用公式是比使用项目的List更好的解决方案。

string formula = "='SheetName'!$B$2:$B$" + lastRowIndex;
cellRange.Validation.Add(Excel.XlDVType.xlValidateList, Excel.XlDVAlertStyle.xlValidAlertStop,
                     Excel.XlFormatConditionOperator.xlBetween, formula , Type.Missing);

我在这里使用的是B列,您可以相应地更改它。