【发布时间】:2014-10-14 19:01:06
【问题描述】:
我正在尝试打开一个 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 读取到数据表的正确方法是什么,或者我应该怎么做才能防止内存不足问题?提前感谢您的帮助。
【问题讨论】:
-
您确定您的
foreach循环只读取非空行吗?你能在里面放一个计数器看看它有多大,或者调试一下看看xlWorksheet.Rows.Count的值是多少? -
我没有碰巧使用这些互操作工具,所以请原谅我的无知,但这是正常的,您不在循环中使用
foreach变量row,而是添加@ 987654327@? -
Floremin 给我带来了一些有趣的信息。 xlWorksheet.Rows.Count 返回的行数等于 65536,这比实际使用的要多。奇怪的是,内存不足发生在 foreach 循环的第一次迭代中。我假设它可能还试图将最大数量的列放入数据表中。我一定是在阅读 excel 方面做错了。
标签: c# excel office-interop