2017-11-28 2 views
0

後で使用するExcelファイルの各行を読み込むコードを記述しました。価値。Excelファイルから読み込む - 値を持つセルを表示するNullを表示する

私はこれらの値をリストボックスに表示しましたが、エクセルファイルのストックコードと比較すると、予想よりもはるかに多くの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

あなたの提案をありがとう!私は説明のExcelファイルの例へのドロップボックスリンクを追加しました。 –

答えて

0

私はそれが必要未満、または時にはそれがより多くの細胞が含まれ、Worksheet.UsedRangeが常に正しく動作することを信頼しないでしょう。私の提案は、あなたが値を持っている間、ワークシートのすべての行を読むことです。値がなくなると、それを読み終えます。 行が多すぎる場合は、同時にすべての値をhereのような配列に読み込んで配列を操作できます。

0

あなたの貢献のおかげで、私はエラーを解決しました!

それはrow.Cells [7] .Value.ToString(されている必要があります[TotalCounter、7] .Value.ToString()

row.Cellsで発生

必要はありませんでしたForeachループで処理される行インデックスを指定することができます。アレックスが提案したように、Worksheet.UsedRangeがすべてのケースで機能しない可能性があるため、コードを書く別の方法を検討します。

関連する問題