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

时间:2015-06-22 19:41:28

标签: c# excel vsto

我使用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(约)项,那么它会抛出错误

  

类型' System.Runtime.InteropServices.COMException'的例外情况发生在mscorlib.dll中但未在用户代码中处理

     

附加信息:来自HRESULT的异常:0x800A03EC

如果项目数量很小,如600-700,它可以正常工作。我不知道如何解决这个问题。

那么如何以这种方式添加验证,以便我的下拉列表可以保存超过1K的记录,或者可能远高于此记录?

1 个答案:

答案 0 :(得分:0)

经过大量的研究,我终于找到了解决方案。如果您想要在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,您可以相应地更改它。