在JAVA中使用POI提取Excel数据时出现空单元格?

时间:2010-03-18 12:25:01

标签: java excel apache-poi jexcelapi

我刚刚使用Apache POI从excel表中提取了单元格,一切正常。但是每当有一个空单元格时,下一个正确的单元格数据就是我得到的输出。但是,如果后者存在一个值,那么期望的输出就会到来。

这是我写的逻辑。

    Iterator<Row> rowIterator=sheet.rowIterator();
    while(rowIterator.hasNext())
    {

        ExtractedRowsString extRows=new ExtractedRowsString();
        ArrayList<HSSFCell> list=new ArrayList<HSSFCell>();
        HSSFRow row=(HSSFRow) rowIterator.next();

        Iterator<Cell> cellIterator=row.cellIterator();
        while(cellIterator.hasNext())
        {
            HSSFCell cell=(HSSFCell)cellIterator.next();
            list.add(cell); 
        }
        if(check)
        {
            addBean(list,extRows);
            print(extRows);
        }

        check=true;

    }

可能是什么问题?

已编辑:

public static void addBean(ArrayList list,ExtractedRowsString extRows)
{
    for(int i=0;i<list.size();i++)
    {
        switch(i)
        {
            case 0:
                extRows.setSchool_success_id((list.get(i)).toString());
                break;
            case 1:
                extRows.setPem_id( (list.get(i)).toString() );
                break;  
            case 2:
                extRows.setDistrict_code((list.get(i)).toString());
                break;
            case 3:
                extRows.setDistrict((list.get(i)).toString());
                break;

        }
    }
}

2 个答案:

答案 0 :(得分:3)

来自docs

  

<强> cellIterator

     

public java.util.Iterator cellIterator()

     

指定人:   接口行中的cellIterator

     

返回:   物理的细胞迭代器   定义的细胞。请注意第4个   元素可能不是单元格4,因为   迭代器不会返回   未定义的(null)单元格。呼叫   getCellNum()返回的单元格   知道他们是哪个细胞。仅此而已   曾经在身体上定义   细胞,Row.MissingCellPolicy有   没有效果。

简而言之,空单元格不会显示在迭代器中,所以你总是要检查你得到的单元格。

答案 1 :(得分:0)

ArrayList允许添加空值。还有什么是addBean方法呢(可能会跳过空值或空字符串?)你能发布一个可以运行的小工作代码吗?