0

インターネットで検索していくつかのコードを試した後、Interop を使用して Excel から Datatable にデータをエクスポートしました。問題は、非常に遅いことです。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;
4

2 に答える 2

1

あなたが聞いていない質問にお答えします。NPOI ライブラリを使用します。

  • それは速くなります
  • リソースを閉じるのを忘れても問題はありません
  • Excel は不要であり、バックグラウンドで使用されることもありません

これに関連するコードは次のとおりです: NPOI : How To Read File using NPOI . xlsxフォーマットについては、XSSFWorkbook代わりに を使用してください (バージョン 2.0 以降で使用可能です)。

于 2012-11-12T13:24:14.430 に答える
0

これに関する私の最初の考えは、Excel シートをループし、値を 1 つずつ配列に変換して構造体に入力していることです。

次の行に沿ってさらに何かを試してください(私のVBを許してください、しかし、私が推奨していることを理解してくれると確信しています):

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

次に、代わりに配列をループします。

これにより、速度が大幅に向上するはずです。

于 2012-11-12T14:21:07.200 に答える