在Excel互操作中处理大的select范围

可能重复:
OutofMemoryexception对象数组大小

我正在尝试将电子表格数据捕获到二维数组中。 我正在使用VSTO。

int rc = 1048576; int cc = 1638; string[,] arr = new string[rc, cc]; 

最后一行抛出内存exception。 我想显示消息告诉用户只有'X'元素可以被捕获。

检查了MSDN,对于data-table有一个16,777,216的行数限制,所以一个数据表可以容纳一个工作表的大小数据。 不能find二维数组的限制。

我的问题不是为什么例外。 我正在寻找的是如果你正在做VSTO开发,并且不得不捕获一个DataTable中的工作表来执行In-Memory连接等,你将需要这样做:

 string[,] arr = new string[rc, cc]; Microsoft.Office.Interop.Excel.Range selection arr = selection.Value as string[,]; 

然后将该数组中的数据复制到数据表中。 现在,对于用户应该select的元素数量的理想限制是什么。 所以我可以设置rowcount / columncount lmits并显示消息,当select超过这个标准。 OR是否有任何其他方式来创build一个基于工作表中选定范围的数据表,考虑第一行始终是列标题。

你可以做的是创build自己的class级:

  public class MyClass { public static string col1 {get;set;} public static string col2 {get;set;} public static string col3 {get;set;} //etc for every column } 

将第一行读入MyClass的属性

然后将你的工作表的每一行读入这样的列表:

 List<string> myList = new IList<string>(); myList.append(anInstanceofMyClass); 

重复每一行数据