【问题标题】:WHY Datatable add vaule have IndexOutOfRangeException in the c #为什么 Datatable add vaule 在 c# 中有 IndexOutOfRangeException
【发布时间】:2017-01-19 10:20:55
【问题描述】:

原始数据(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 列”。问题。

如何解决这个问题,谢谢。

【问题讨论】:

    标签: excel c#-4.0 datatable npoi


    【解决方案1】:

    您正在尝试从数据行添加对象,而不是此处的整行:

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

    这应该替换为

    table.Rows.Add(dataRow);
    

    IndexOutOfRangeException 是由K 索引值引起的 - 由于dataRow 只有4 列,它无法获取5-数组的第一个元素。

    【讨论】:

      【解决方案2】:

      您的索引似乎不正确。当您调用table.Rows.Add(datarow[K]) 时,您正在尝试将dataRow 的第K 个元素添加为表格中的一行。您已将表格设置为只有 4 列,因此当您尝试访问第 5 列 (K=4) 时会出现错误。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2018-03-26
        • 1970-01-01
        • 2016-10-26
        • 1970-01-01
        • 1970-01-01
        • 2012-03-13
        • 1970-01-01
        • 2012-06-11
        相关资源
        最近更新 更多