我正在尝试打开一个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读取到数据表的正确方法是什么,或者我应该怎样做才能防止内存不足问题?提前感谢您的帮助。
答案 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。它对眼睛来说更容易。