ПОЧЕМУ Datatable add vaule имеет IndexOutOfRangeException в c #

Необработанные данные (ФАЙЛ EXCEL)

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». проблема.

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


person square    schedule 12.09.2016    source источник


Ответы (2)


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

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

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

table.Rows.Add(dataRow);

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

person VMAtm    schedule 12.09.2016

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

person jm.gunter    schedule 12.09.2016