foreach循环中的System.OutOfMemoryException

我试图打开一个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); 

工作表不是特别大,所有的数据是string或数字(没有图像或图表)。 我假设试图将一个Excel行添加到一个数据表行有根本的错误。 使用Interop将Excel读取到数据表的正确方法是什么?或者我应该如何防止我的内存不足问题? 预先感谢您的任何帮助。

 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方法 。 我也使用了隐式types 。 这对眼睛更容易。