使用Interop.Excel读取大型Excel文件会导致System.OutOfMemoryException

时间:2015-03-02 22:18:16

标签: c# import-from-excel

我遵循这个非常有前途的link来让我的程序读取Excel文件,但我得到的问题是System.OutOfMemoryException。据我所知,这可能是因为这段代码

object[,] valueArray = (object[,])excelRange.get_Value(
            XlRangeValueDataType.xlRangeValueDefault);

将整个数据列表加载到一个变量中。我不明白为什么库的开发人员决定这样做,而不是制作一个迭代器,它将逐行解析一个表。因此,我需要一些能够读取大型(> 700K行)Excel文件的工作解决方案。

1 个答案:

答案 0 :(得分:1)

我在我的一个C#应用程序中使用以下函数:

  string[,] ReadCells(Excel._Worksheet WS, 
                      int row1, int col1, int row2, int col2)
        {
            Excel.Range R = WS.get_Range(GetAddress(row1, col1), 
                                         GetAddress(row2, col2));
            ....
        }

一次性而不是逐个单元读取Range的原因是性能。 对于每个小区访问,正在进行大量内部数据传输。如果Range太大而无法放入内存,则可以用较小的块处理它。