2016-09-12 8 views
0

生データ(Excelファイル)DATATABLE追加vauleは、C#で

1TEST101 TEST1 YOYO 2015/11/25 1:38 PM 
1TEST102 TEST2 YOYO 2015/11/23 9:17 PM 
1TEST103 TEST3 YOYO 2015/11/23 9:15 PM 
1TEST104 TEST4 YOYO 2015/12/10 6:13 PM 
1TEST105 TEST5 YOYO 2015/12/10 2:29 PM 
1TEST106 TEST6 YOYO 2015/12/11 11:03 AM 
1TEST107 TEST7 YOYO 2015/12/2 8:50 AM 
1TEST108 TEST8 YOYO 2015/12/12 12:58 PM 
1TEST109 TEST9 YOYO 2015/12/2 8:51 AM 
1TEST110 TEST10 YOYO 2015/12/10 2:29 PM 
1TEST111 TEST11 YOYO 2015/11/20 8:44 AM 
1TEST112 TEST12 YOYO 2015/11/20 8:45 AM 
1TEST113 TEST13 YOYO 2015/11/20 8:47 AM 
1TEST114 TEST14 YOYO 2015/11/20 8:47 AM 
1TEST115 TEST15 YOYO 2015/11/20 8:49 AM 
1TEST116 TEST16 YOYO 2015/11/20 9:15 AM 

[CODE]私はデータテーブルに秀でるNPOIを読み取るために使用

public static DataTable ReadExcelAsTableNPOI(string fileName) 
{ 
    using (FileStream fs = new FileStream(fileName, FileMode.Open)) 
    { 
     HSSFWorkbook wb = new HSSFWorkbook(fs); 
     ISheet sheet = (HSSFSheet)wb.GetSheetAt(0); 
     DataTable table = new DataTable(); 
     table.Columns.Add(new DataColumn("Id")); 
     table.Columns.Add(new DataColumn("Desc")); 
     table.Columns.Add(new DataColumn("USER")); 
     table.Columns.Add(new DataColumn("Date")); 
     IRow headerRow = sheet.GetRow(0); 

     for (int K = (sheet.FirstRowNum); K <= sheet.LastRowNum; K++) 
     { 
      IRow row = sheet.GetRow(K); 
      DataRow dataRow = table.NewRow(); 

      if (row == null) continue; 

      table.Rows.Add(dataRow[K]); // when loop at 5 time , it have the IndexOutOfRangeException problem 

      for (int j = row.FirstCellNum; j < cellCount; j++) 
      { 
       if (row.GetCell(j) != null) 
       { 
        row.GetCell(j).SetCellType(CellType.String); 
        dataRow[j] = row.GetCell(j) == null ? "0" : row.GetCell(j).StringCellValue; ; 
        string Cellvalue = dataRow[j].ToString(); 
        table.Rows[K][j] = Cellvalue; 
       } 
      } 
     } 

     return table; 
    } 
} 

が、プログラムの実行をIndexOutOfRangeExceptionを持っている理由でtable.Rows.Add(dataRow [K]);

「4列が見つかりません」と表示されます。問題。

この問題を解決する方法は、ありがとうございます。

答えて

0

インデックスが正しくないようです。 table.Rows.Add(datarow[K])に電話するときは、dataRowのK番目の要素をテーブルの行として追加しようとしています。テーブルを4列しか持たないようにセットアップしたので、5列目(K = 4)にアクセスしようとするとエラーが発生します。ここにあなたがのDataRowからオブジェクトを追加しようとしている

+0

あなたは@VMAtmです。 NewRowについてのコメントを削除しました。 –

0

、全体ではなく行は:

table.Rows.Add(dataRow[K]); // when loop at 5 time , it have the IndexOutOfRangeException problem 

これは

table.Rows.Add(dataRow); 

IndexOutOfRangeExceptionKインデックス値によって引き起こされるに置き換える必要があります - とdataRowには4列しかないため、配列の5番目の要素を取得できません。

関連する問題