Почему Datatable add vaule имеет IndexOutOfRangeException в c #

Исходные данные (EXCEL FILE)

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 

[КОД]

 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 для datatable, но когда программа запускается в table.Rows.Add (dataRow [K]);

он покажет «Невозможно найти столбец 4.» проблема.

как исправить эту проблему, спасибо.

Вы пытаетесь добавить объект из datarow, а не всю строку здесь:

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

Это следует заменить на

 table.Rows.Add(dataRow); 

IndexOutOfRangeException вызвано значением индекса K – поскольку dataRow имеет только 4 столбца, ему не удается получить 5 элемент массива.

Похоже, что ваша индексация неверна. Когда вы вызываете table.Rows.Add(datarow[K]) вы пытаетесь добавить элемент Kth dataRow в виде строки в таблице. Вы настроили таблицу только на 4 столбца, поэтому, когда вы пытаетесь получить доступ к 5-му столбцу (K = 4), вы получаете сообщение об ошибке.

Давайте будем гением компьютера.