2013-03-21 32 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

相关问题