在读取excel文件时,如何识别单元格为空或null或为空

时间:2016-05-13 06:39:16

标签: java excel apache-poi xssf

我读了一个excel文件来传递一些数据字段的输入。但是当我运行程序时,一些单元格值返回null,有些则为空。实际上,当我打开excel文件时,单元格中没有值。

如何手动识别excel单元格为空或空白。

对于某些情况,我需要将空白值传递给字段。 如果单元格为null,则无法将值传递给字段。

指导我伸出援手。

代码:

public static void readAllData() throws IOException{

    Object result = null;

    String sheetName = "Testsheet";

    String filePathxlsx = "C:/Users/MSTEMP/Documents/Files/Testxssf.xlsx";

    try

    {

     FileInputStream in = new FileInputStream(filePathxlsx);

     File file = new File(filePathxlsx);



    if(file.isFile() && file.exists()){

        XSSFWorkbook xworkbook = new XSSFWorkbook(in);
        XSSFSheet xsheet=xworkbook.getSheet(sheetName);
        int totalRows = xsheet.getLastRowNum();

        for(int row =1; row<totalRows;row++){
            xrow=xsheet.getRow(row);
            int totalCells=xrow.getLastCellNum();

            for(int cell =0; cell<totalCells;cell++){
                if(xrow != null)
                {
                    xcell= xrow.getCell(cell);

                    if(xcell!=null)
                    {
                        switch (xcell.getCellType()) {

                            case Cell.CELL_TYPE_NUMERIC:// numeric value in excel
                                if(DateUtil.isCellDateFormatted(xcell)){

                                    Date myDate = xcell.getDateCellValue();
                                    SimpleDateFormat formatter = new SimpleDateFormat("dd/MM/yyyy", Locale.US);
                                    result = formatter.format(myDate);
                                    //System.out.println("Today : " + result);  
                                }
                                else{
                                    result = new BigDecimal(xcell.getNumericCellValue()).toPlainString();
                                }
                                break;

                            case Cell.CELL_TYPE_STRING: // string value in excel
                                result = xcell.getStringCellValue();
                                break;

                            case Cell.CELL_TYPE_BOOLEAN: // boolean value in excel
                                result = xcell.getBooleanCellValue();
                                break;

                            case Cell.CELL_TYPE_BLANK: // blank value in excel
                                result = xcell.getStringCellValue();
                                break;

                            case Cell.CELL_TYPE_ERROR: // Error value in excel
                                result = xcell.getErrorCellValue()+"";
                                break;
                            }
                        }
                        else
                        {
                            System.out.println("Cell is empty");
                        }
                    System.out.println("Value "+result);
                }
                else
                {
                    System.out.println("Row is empty");
                }
            }    
        }
    }
    inputStream.close();
}
catch (Exception ex){
    ex.printStackTrace();
}

}

1 个答案:

答案 0 :(得分:1)

不确定为什么要手动识别单元格类型,但如果要将案例“null”或“blank”视为单个案例,则可以使用另一个版本的Row.getCell,它采用指定的第二个参数missing cell policy

所以:

 xcell= xrow.getCell(cell);

将成为:

 xcell = xrow.getCell(cell, Row.RETURN_NULL_AS_BLANK);

所以在任何情况下,单元格都有一个值或为空,但从不为空。