2013-03-21 70 views
0
private void btnImportFromxls_Click(object sender, RoutedEventArgs e) 
    { 
     Excel.Application myapp = new Excel.Application(); 
     Excel.Workbook wb = myapp.Workbooks.Open(@"D:\MyExcel.xls"); 
     Excel.Worksheet sheet = (Excel.Worksheet)wb.Worksheets.get_Item(1); 
     Dictionary<object, object> dictionary = new Dictionary<object, object>(); 
     for (int i = 1; i < sheet.UsedRange.Rows.Count; i++) 
     { 
      object key = ((Excel.Range)sheet.Cells[i, 1]).Value2; 
      object value = ((Excel.Range)sheet.Cells[i, 2]).Value2; 

      dictionary.Add(key,value); 
     } 
    } 

具有8,000行數據的excel文件(MyExcel.xls)。當我嘗試使用上面的代碼將數據加載到字典中時,將excel數據加載到字典中需要很長時間。有沒有其他的方法來加快數據加載到字典?性能問題從excel中獲取價值並將其加載到字典中

回答

1

不是通過在範圍內的所有細胞快速迭代是這樣的:

using XLS = Microsoft.Office.Interop.Excel; 

object[,] arrWks; 
object objKom; 
string strKom; 

arrWks = (object[,])sheet.UsedRange.get_Value(XLS.XlRangeValueDataType.xlRangeValueDefault); 

for (int intRow=arrWks.GetLowerBound(0); intRow<=arrWks.GetUpperBound(0); intRow++) 
{ 
    for (int intCol=arrWks.GetLowerBound(1); intCol<=arrWks.GetUpperBound(1); intCol++) 
    { 
     objKom = arrWks[intRow, intCol]; 
     strKom = objKom == null ? "" : objKom.ToString();  

     //do rest of your logic here 
    } 
} 

相反迭代整個arrWks的,你只能通過指定的列重複了。

+0

我不明白你的意思。請告訴我我的代碼。 – 2013-03-21 13:06:51

+0

此代碼將enuWorkshet(您的示例中的表單)的整個UsedRange範圍加載到object [,]數組。然後你可以迭代內存數組,你會發現它更快。 – 2013-03-21 13:10:27

+0

我不知道如何將此代碼應用於我的代碼。請幫助我。 – 2013-03-21 13:19:48