2012-11-12 30 views
0

在Internet中搜索並嘗試一些代碼後,我使用Interop將數據從Excel導出到Datatable。問題是,它非常緩慢。有人可以給我一個關鍵,我怎麼能使它與Interop更快,而不是OLEDB或其他?使用Interop讀取Excel並保存在DataTable中的最快方法

我的代碼:

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; 
+0

爲什麼你需要使用* interop *而不是其他技術? –

+0

@SteveB:我嘗試了許多其他技術,OLEDB和NPOI,但遇到了很多問題。 OLEDB只讀255chars和NPOI必須添加dll文件和更新POI,這是有點複雜 –

回答

1

我給你一個答案,你沒有問一個問題。使用NPOI library

  • 它會更快
  • 你不會有問題,忘記關閉你的資源
  • Excel將不會要求或在後臺

這裏使用的是對於相關代碼:NPOI : How To Read File using NPOI。對於xlsx格式,請改用XSSFWorkbook(它可從2.0版開始使用)。

+0

我嘗試與NPOI,但我不使用它。哪種更好的NPOI或EPPlus? –

+0

@UniLe對不起,但我幫不了你。 – ipavlic

+0

當我使用NPOI時,我得到FileXmlOfficeException因爲我想讀取xlsx文件而不是xls。所以我改爲XSSF,但現在遇到了問題,我必須更新POI。這很複雜 –

0

我對此的第一個想法是,您正在循環瀏覽Excel工作表並逐個將值轉換爲您的數組以填充您的結構。

嘗試沿線的東西更多(請原諒我的VB,但我敢肯定oyu'll明白我的建議):

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

然後做你的循環通過您的陣列來代替。

這應該會大大提高速度。

+0

你能告訴我完整的代碼嗎? –

相關問題