【发布时间】:2017-07-12 13:45:20
【问题描述】:
我们想根据一定范围读取excel表格数据并将其存储到数据库中。 而我们的excel表格包含1807列和541行,所以我们不能使用Datatable来存储数据。 此外,我们需要检查每个单元格的 excel 表,以便将其存储到数据表中。
目前我们已经使用 "Microsoft.Office.Interop.Excel" 组件来读取 Excel 工作表数据。但是在使用这个组件时,从 excel 表中读取数据需要很长时间,我们想让它快速处理。 我们也使用 NPOI 进行了尝试,但我们没有获得任何获取范围数据的选项。
所以,我们只想知道有没有其他组件可以做到这一点?
这是我们尝试过的代码:
public System.Data.DataTable getCellRangeValueAsDataTable(string filename, string startCell, string endCell)
{
System.Data.DataTable newTable = new System.Data.DataTable();
Microsoft.Office.Interop.Excel.Application xlApp = new Microsoft.Office.Interop.Excel.Application();
string result = "";
Workbook wb = xlApp.Workbooks.Open(filename,
Type.Missing, Type.Missing, Type.Missing, Type.Missing,
Type.Missing, Type.Missing, Type.Missing, Type.Missing,
Type.Missing, Type.Missing, Type.Missing, Type.Missing,
Type.Missing, Type.Missing);
Worksheet ws = (Worksheet)wb.Worksheets[2];
Range aRange = ws.get_Range(startCell, endCell);
for (int cCnt = 1; cCnt <= aRange.Columns.Count; cCnt++)
{
newTable.Columns.Add("String" + cCnt, typeof(string));
}
for (int rCnt = 1; rCnt <= aRange.Rows.Count; rCnt++)
{
object[] objArr = new object[aRange.Columns.Count];
for (int cCnt = 1; cCnt <= aRange.Columns.Count; cCnt++)
{
objArr[cCnt - 1] = (aRange.Cells[rCnt, cCnt] as Microsoft.Office.Interop.Excel.Range).Value;
}
newTable.Rows.Add(objArr);
}
return newTable;
}
【问题讨论】: