2017-11-28 23 views
0

나중에 각 행에 대해 업데이트 SQL 쿼리를 실행하는 데 사용할 Excel 파일 (두 개의 특정 열)에있는 모든 행을 읽는 코드를 작성했습니다. 가치.Excel 파일에서 읽기 - 값이있는 셀

나는이 값을 목록 상자에 표시했으며 엑셀 파일의 주식 코드와 비교할 때 예상보다 훨씬 많은 null을 얻고 있습니다.

Excel 파일의 형식을 변경해 보았지만 아무런 차이가 없었습니다. 해당 위치에 주식 코드가있는 행이 있지만 프로그램이 셀 비교를 수행 할 때 실제로 값을 가질 때 프로그램이이를 null로 식별합니다.

누구든지 내 코드에 어떤 문제가 있는지 알고 있습니까?

private void btnStockCodes_Click(object sender, RoutedEventArgs e) 
{ 
    string file = @"\\amn-fs-01\users$\Shanel\Desktop\Stock Codes.xlsx"; 
    Microsoft.Office.Interop.Excel.Application ExcelApp = new Microsoft.Office.Interop.Excel.Application(); 
    Workbook ExcelWorkbook = ExcelApp.Workbooks.Open(file); 
    Worksheet ews = ExcelApp.ActiveWorkbook.Sheets[1]; 
    Microsoft.Office.Interop.Excel.Range usedRange = ews.UsedRange; 

    int TotalCounter = 0; 
    string StockCode = ""; 
    string ReserveID = ""; 
    int nullcounter = 0; 
    int foundcounter = 0; 

    foreach (Microsoft.Office.Interop.Excel.Range row in usedRange.Rows) 
    { 
     StockCode = ""; 
     ReserveID = ""; 
     TotalCounter = TotalCounter + 1; 

     if (row.Cells[TotalCounter,7].Value == null) 
     { 
      Listbox1.Items.Add(TotalCounter + " null"); 
      nullcounter = nullcounter + 1; 
     } 
     else 
     { 
      StockCode = row.Cells[TotalCounter,7].Value.ToString(); 
      ReserveID = row.Cells[TotalCounter, 3].Value.ToString(); 
      Listbox1.Items.Add(TotalCounter + " " + StockCode + " " + ReserveID); 
      foundcounter = foundcounter + 1; 
     } 
    } 

    txtTotal1.Text = foundcounter.ToString() + " Found"; 
    txtTotal2.Text = nullcounter.ToString() + " Null Values"; 
    txtTotal3.Text = TotalCounter.ToString() + " Total Records"; 
} 
+0

코드를 테스트 할 샘플 파일을 업로드하십시오. 문제를 보여주는 몇 줄의 데이터로 줄이십시오. – mjwills

+0

당신의 제안에 감사드립니다! 설명에 엑셀 파일 예제에 드롭 박스 링크를 추가했습니다. –

답변

0

Worksheet.UsedRange가 항상 올바르게 작동하고, 때로는 그보다 많은 셀을 포함하고 있다고 믿지 않습니다. 내 제안은 값이있는 동안 워크 시트의 모든 행을 읽는 것입니다. 더 이상 값이 없으면 읽는 것을 멈추십시오. 그리고 행 수가 너무 많으면 동시에 모든 값을 here과 같은 배열로 읽고 배열로 작업 할 수 있습니다.

0

의견을 보내 주셔서 감사합니다. 오류를 해결했습니다.

그것이 [7] .Value.ToString()가 필요

받았다고 row.Cells 없었다한다

row.Cells [TotalCounter 7] .Value.ToString()에서 발생 Foreach 루프에서 처리 된대로 행 인덱스를 지정합니다. Alex가 제안한대로 Worksheet.UsedRange가 모든 경우에 작동하지 않을 수 있으므로 코드를 작성하는 대체 방법을 살펴볼 것입니다.