2016-09-12 25 views
0

原始數據(Excel文件)WHY DATATABLE附加vaule具有IndexOutOfRangeException在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]

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; 
    } 
} 

我使用NPOI來讀取Excel到數據表中,但該程序運行時在table.Rows.Add(dataRow [K]);

它會顯示「無法找到第4列」。問題。

如何解決這個問題,謝謝。

回答

0

看起來您的索引不正確。當您撥打table.Rows.Add(datarow[K])時,您嘗試將dataRow的第K個元素添加爲表中的一行。您已將表設置爲只有4列,所以當您嘗試訪問第5列(K = 4)時,您會收到錯誤消息。

+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數組元素。