2

可能重复:
OutofMemory 异常对象数组大小

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

int rc = 1048576;
int cc = 1638;

string[,] arr = new string[rc, cc];

最后一行抛出内存不足异常。我想显示消息告诉用户只能捕获“X”元素。

检查 MSDN 并提到数据表的行数限制为 16,777,216。因此数据表可以保存工作表大小的数据。无法找到二维数组的限制。

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

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

然后将该数组中的数据复制到数据表中。现在,用户应该选择的元素数量的理想限制是什么。所以我可以设置行数/列数限制并在选择超过此条件时显示消息。或者是否有任何其他方法可以根据工作表中的选定范围创建数据表,考虑到第一行始终是列标题。

4

1 回答 1

0

您可以做的是创建自己的类:

    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);

对每一行数据重复

于 2012-10-11T19:21:10.290 回答