apache poi indexoutbound异常

Michael Kuan
  • Excel文件(test1.xlsx)
    名称性别年龄辞职日期
    Ali M 20
    Abu M 25
    Siti F 30

  • 代码

    public class ReadExcel {
    
    public static ArrayList<String> record;
    
    public static void main(String[] args) throws FileNotFoundException, IOException {
    
     //---Read file---
    FileInputStream in = new FileInputStream("test1.xlsx");
    XSSFWorkbook workbook = new XSSFWorkbook(in);
    XSSFSheet spreadsheet = workbook.getSheetAt(0);
    XSSFRow row;
    Cell cell;
    
    Iterator<Row> rowIterator = spreadsheet.iterator();
    
    while(rowIterator.hasNext()){
        record = new ArrayList<String>();
        row = (XSSFRow)rowIterator.next();
    
        if(row.getRowNum()==0) {
            continue;
        }
    
         for(int k = 0; k < row.getLastCellNum();k++){
            cell = row.getCell(k, Row.CREATE_NULL_AS_BLANK);
        }
    
        Iterator<Cell> cellIterator = row.cellIterator();
    
        while(cellIterator.hasNext()){
                cell = cellIterator.next();
                cell.setCellType(Cell.CELL_TYPE_STRING); 
    
                switch(cell.getCellType()){
                    case Cell.CELL_TYPE_STRING:
                        record.add(cell.getStringCellValue());
                        System.out.print(cell.getStringCellValue());
                        break;
                    case Cell.CELL_TYPE_NUMERIC:
                        Double value = cell.getNumericCellValue();
                        Long longValue = value.longValue();
    
                        record.add(Double.toString(cell.getNumericCellValue()));
                        System.out.print(cell.getNumericCellValue());
                        break;
                }
            }   
            System.out.println();
    
            String name = record.get(0);
            String gender = record.get(1);
            String age = record.get(2);
            String dateLeave = record.get(3);  //[ERROR]
    
            System.out.println(name + gender + age + dateLeave);
            }
        }
    }
    

但是,从我上面的程序中,我得到了这个异常:

Exception in thread "main" java.lang.IndexOutOfBoundsException: Index: 3, Size: 3
at java.util.ArrayList.rangeCheck(ArrayList.java:653)
at java.util.ArrayList.get(ArrayList.java:429)
at ibguobform.ReadExcel.main(ReadExcel.java:66)
Java Result: 1

我犯了什么错误?

大卫

您的代码正在尝试引用仅包含三个元素的集合的第四个元素:

record.get(3)

由于只有三个元素,因此尝试引用第四个元素会产生错误。

为什么只有三个要素?

好吧,看一下数据:

Ali     M     20
Abu     M     25
Siti    F     30

每行三个元素。

似乎正在发生的事情是代码正在动态检查最后一个“元素”:

for(int k = 0; k < row.getLastCellNum(); k++){
    cell = row.getCell(k, Row.CREATE_NULL_AS_BLANK);
}

似乎row.getLastCellNum()在告诉代码只有三个单元格。(因为很好,所以其中只有三个单元格中有数据。)如果即使没有数据,第四个单元格也有效,请通过始终使用四个元素来明确指出代码中:

for(int k = 0; k < 4; k++){
    cell = row.getCell(k, Row.CREATE_NULL_AS_BLANK);
}

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

apache poi indexoutbound异常

来自分类Dev

Apache POI Word文档空指针异常

来自分类Dev

Apache POI:计算公式时发生异常

来自分类Dev

使用Apache POI的Java程序给了我怪异的异常

来自分类Dev

Apache POI插入图像

来自分类Dev

Apache POI的ProGuard设置

来自分类Dev

使用Apache POI的PatternSyntaxException

来自分类Dev

Apache POI宽度计算

来自分类Dev

Apache POI和颜色

来自分类Dev

Apache POI ClassNotFoundException

来自分类Dev

Apache POI XSSFPivotTable setDefaultSubtotal

来自分类Dev

Apache POI解析错误

来自分类Dev

Apache POI性能

来自分类Dev

Android Apache POI错误

来自分类Dev

Apache POI依赖项

来自分类Dev

Apache POI宽度计算

来自分类Dev

Apache POI的ProGuard设置

来自分类Dev

重复的 Apache POI jar

来自分类Dev

For 循环 NullPointerException 与 Apache POI

来自分类Dev

硒 + Apache POI + Java

来自分类Dev

Apache POI异常空白(已解决:\ u00A0不间断空格)

来自分类Dev

Geeting异常查找没有。使用Apache poi的xlsx文件中的工作表数量

来自分类Dev

使用Apache POI读取xlsx文件时出现异常(org.apache.poi.openxml4j.exceptions.InvalidFormatException:日期格式不正确,..)?

来自分类Dev

自动换成Apache POI(Excel)

来自分类Dev

保存Excel文档Apache POI

来自分类Dev

获取cell apache poi的名称

来自分类Dev

Apache Poi更新XLS文件

来自分类Dev

Removing the last row apache poi

来自分类Dev

Apache POI读取xlsx NPE