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

나는 당신이 의미하는 것을 이해하지 못합니다. 내 코드를 알려주십시오. –

+0

이 코드는 enuWorkshet의 전체 UsedRange 범위 (예제의 시트)를 object [,] 배열에로드합니다. 그런 다음 메모리 내 배열을 반복 할 수 있습니다. 그러면 훨씬 빨라집니다. –

+0

이 코드를 내 코드와 함께 적용하는 방법을 모르겠습니다. 제발 도와주세요. –