Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/306.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 使用VSTO C对Excel单元格下拉列表中的列表项有限制吗?_C#_Excel_Vsto - Fatal编程技术网

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

C# 使用VSTO C对Excel单元格下拉列表中的列表项有限制吗?,c#,excel,vsto,C#,Excel,Vsto,我正在使用vsto创建excel加载项。我正在向单元格中添加验证,并将其设置为下拉列表。下拉列表的数据源位于另一列中。我正在使用这个代码 string values = string.Join(",", cellValuesArray); cellRange.Validation.Delete(); cellRange.Validation.Add(Excel.XlDVType.xlValidateList, Excel.XlDVAlertS

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

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条记录?

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

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

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

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

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

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

为什么您希望下拉列表中有这么多记录。。您是否考虑过采用不同的方法,或者加载100个项目,然后从那里查询数据库,根据您在下拉列表中键入的内容返回基于LiKE子句的记录..:Yeah@MethodMan我同意您的看法,但我这里没有任何数据库。我只是有一个包含源数据的另一张表,在此基础上,我需要确保用户不能将无效数据放入我的主单元格。这就是我填充下拉列表的原因。我还注意到,当
values.Length
大于
8190
时,即逗号分隔字符串中的字符总数大于8190时,它会引发此异常。到目前为止,我还没有找到任何关于此限制的信息。为什么您要在下拉列表中显示这么多记录。。您是否考虑过采用不同的方法,或者加载100个项目,然后从那里查询数据库,根据您在下拉列表中键入的内容返回基于LiKE子句的记录..:Yeah@MethodMan我同意您的看法,但我这里没有任何数据库。我只是有一个包含源数据的另一张表,在此基础上,我需要确保用户不能将无效数据放入我的主单元格。这就是我填充下拉列表的原因。我还注意到,当
values.Length
大于
8190
时,即逗号分隔字符串中的字符总数大于8190时,它会引发此异常。我没有找到任何关于这个限制的信息,直到现在我面临着同样的问题,但我的下拉列表在功能区中,在7项之后它消失了。。。任何关于其发生原因的线索,或者是否存在某些限制。我正在加载50个项目。我面临着同样的问题,但我的下拉列表在功能区中,在7个项目之后它消失了。。。任何关于其发生原因的线索,或者是否存在某些限制。我大约要装50件