处理Excel互操作中的大型选择范围

时间:2012-10-11 15:27:21

标签: c# excel vsto

  

可能重复:
  OutofMemory Exception Object Array Size

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

int rc = 1048576;
int cc = 1638;

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

最后一行抛出Out of Memory异常。我想显示消息告诉用户只能捕获'X'元素。

检查MSDN并且数据表中提到了16,777,216的行计数限制。因此,数据表可以保存工作表大小的数据。无法找到2D阵列的限制。

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

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

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

1 个答案:

答案 0 :(得分: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);

重复每一行数据