使用Interop读取Excel并在DataTable中保存的最快方法

时间:2012-11-12 13:18:42

标签: c# excel datatable export

在Internet上搜索并尝试了一些代码后,我将数据从Excel导出到Datatable with Interop。问题是,它很慢。有人可以给我一把钥匙我怎么能用Interop更快,而不是OLEDB或其他任何东西?

我的代码:

object misValue = System.Reflection.Missing.Value;

Excel.Application xlApp = new Excel.Application();
Excel.Workbook xlWorkbook = xlApp.Workbooks.Open(userSelectedFilePath2);
Excel._Worksheet xlWorksheet1 = xlWorkbook.Sheets[1];
Excel.Range xlRange1 = xlWorksheet1.UsedRange;

DataTable excelTb1 = new DataTable();

for (int j = 1; j <= xlRange1.Columns.Count; j++) // Header Names
{
    excelTb1.Columns.Add(xlRange1.Cells[1, j].Value2.ToString());
}

DataRow dataRow = null;

for (int row = 2; row < xlRange1.Rows.Count + 1; row++)
{
    dataRow = excelTb1.NewRow();

    for (int col = 1; col <= xlRange1.Columns.Count; col++)
    {
        dataRow[col - 1] = (xlRange1.Cells[row, col] as Excel.Range).Value2;
    }
    excelTb1.Rows.Add(dataRow);
}

xlWorkbook.Close(true, misValue, misValue);
xlApp.Quit();
dataGridView1.DataSource = excelTb1;

2 个答案:

答案 0 :(得分:1)

我会给你一个你没有问过的问题的答案。使用NPOI library

  • 会更快
  • 忘记关闭资源不会有问题
  • 不需要或在后台使用Excel

以下是相关代码:NPOI : How To Read File using NPOI。对于xlsx格式,请改用XSSFWorkbook(从版本2.0开始提供)。

答案 1 :(得分:0)

我对此的第一个想法是,您正在遍历Excel工作表并在数组中逐个转换值以填充您的结构。

尝试更多的内容(原谅我的VB,但我确信oyu会理解我推荐的内容):

Dim SpreadsheetVals(,) as object
SpreadhseetVals = xlWorksheet1.UsedRange

然后在你的数组中循环。

这应该会大大提高速度。