foreach循环中的System.OutOfMemoryException超过了一个echeet行

时间:2014-10-14 19:01:06

标签: c# excel office-interop

我正在尝试打开一个excel文件,并将内容放入数据表中,以便在我的程序中进一步使用。该程序正在收到主题标题中的错误。

private void ReadExcelToDataSet(string FileName,string Worksheet)
    {
        Microsoft.Office.Interop.Excel.Application xlApp;
        Microsoft.Office.Interop.Excel.Workbook xlWorkbook;
        Microsoft.Office.Interop.Excel.Worksheet xlWorksheet;

        xlApp = new Microsoft.Office.Interop.Excel.Application();
        xlWorkbook = xlApp.Workbooks.Open(FileName);
        xlWorksheet = xlWorkbook.Sheets[Worksheet];

        System.Data.DataTable ReadExcel = new System.Data.DataTable();
        Range UsedRange = xlWorksheet.UsedRange;

        foreach(Range row in xlWorksheet.Rows)
        {
            ReadExcel.Rows.Add(xlWorksheet.Rows.Value);
        }

        dataGridViewTest.DataSource = ReadExcel;
    }

该计划失败了:

ReadExcel.Rows.Add(xlWorksheet.Rows.Value);

工作表不是特别大,所有数据都是字符串或数字(没有图像或图表)。我假设尝试将Excel行添加到数据表行时存在根本性的错误。使用Interop将Excel读取到数据表的正确方法是什么,或者我应该怎样做才能防止内存不足问题?提前感谢您的帮助。

1 个答案:

答案 0 :(得分:1)

var ReadExcel = new System.Data.DataTable();
var UsedRange = xlWorksheet.UsedRange;
// Add a new column to the DataTable
var column = new DataColumn();
column.ColumnName = "rowValue";
ReadExcel.Columns.Add(column);

foreach (Range row in xlWorksheet.Rows)
{               
    var newrow = ReadExcel.NewRow();
    // Add row.Value NOT xlWorksheet.Rows.Value
    newrow["rowValue"] = row.Value;
    ReadExcel.Rows.Add(newrow);
}

基本上,您已xlWorksheet.Rows.Value而不是row.Value。但我猜你也想要正确使用DataTable。请参阅此处以获取示例:DataTable.NewRow Method 。我还使用了implicit typing。它对眼睛来说更容易。