How to read Excel cell having null values too in Java…?

前端 未结 5 1457
梦谈多话
梦谈多话 2021-02-09 13:17

I\'m using Apache POI 3.6. I\'ve a column which is blank. I would like to be able to read it and then move to the next column. Even if I could resolve the

相关标签:
5条回答
  • 2021-02-09 13:42

    I've finally got what I want. I thank mezmo for it. I want to share the exact code snippet to be changed. Just replace the line having :

    HSSFCell cell = row.getCell(c);
    

    with

    HSSFCell cell=row.getCell(c, org.apache.poi.ss.usermodel.Row.CREATE_NULL_AS_BLANK );
    
    0 讨论(0)
  • 2021-02-09 13:47

    You need to check if cell!=null, because if a cell doesn't exist in a row, row.getCell(c) returns null

    0 讨论(0)
  • 2021-02-09 13:47

    Try this

    List cellDataList = new ArrayList();
    XSSFWorkbook workbook = new XSSFWorkbook(fileInputStream);
    
                            XSSFSheet sheet = workbook.getSheetAt(0);
    
                            Iterator rows = sheet.rowIterator();
    
                            int number=sheet.getLastRowNum();
    
    
                            int lineNumber = 0;
    
                            while (rows.hasNext())
    
                            {
                                XSSFRow row = ((XSSFRow) rows.next());
                                lineNumber++;
                                if(lineNumber==1){continue;}
    
    
    
    
                                Iterator cells = row.cellIterator();
                                List cellTempList = new ArrayList();    
                                int current = 0, next =1;
                                while(cells.hasNext())
    
                                {
    
                                    XSSFCell cell = (XSSFCell) cells.next();
    
    
                                    current = cell.getColumnIndex();
    
    
                                    if(current<next){
    
                                    }
                                    else{
    
                                        int loop = current-next;
    
                                        for(int k=0;k<loop+1;k++){
    
                                            cellTempList.add(null);
                                            next = next + 1;
                                        }
                                    }
                                    switch (cell.getCellType()) {
                                                case Cell.CELL_TYPE_STRING:
                                                    System.out.println(cell.getRichStringCellValue().getString());
                                                    cellTempList.add(cell.getRichStringCellValue().getString());
                                                    break;
                                                case Cell.CELL_TYPE_NUMERIC:                                                    
                                                        System.out.println(cell.getNumericCellValue());
                                                        cellTempList.add(String.valueOf(cell.getNumericCellValue()));                                                   
                                                    break;
                                                case Cell.CELL_TYPE_BOOLEAN:
                                                    System.out.println(cell.getBooleanCellValue());
                                                    break;
                                                case Cell.CELL_TYPE_FORMULA:
                                                    System.out.println(cell.getCellFormula());
                                                    cellTempList.add(cell.getCellFormula());
                                                    break;                                              
    
                                                default:
                                                    System.out.println("Inside default");
                                    }
                                    next = next + 1;
    
                                }
                                cellDataList.add(cellTempList); 
                             }
    
    0 讨论(0)
  • Well, you could check for null before your switch statement, or you could change which call to row.getCell you make. Checking the Javadoc for POI there are 2 forms, the first is what you are using, the second has an additional parameter, of the type Row.MissingCellPolicy, where you can pass a value that would automagically transform null cells into blanks.

    0 讨论(0)
  • 2021-02-09 13:50

    Thank you Venkat, it work for me also except
    for those who are using Apache 4.0.0 and up they need to do it as :

    HSSFCell cell=row.getCell(c, org.apache.poi.ss.usermodel.Row.MissingCellPolicy.CREATE_NULL_AS_BLANK);
    
    0 讨论(0)
提交回复
热议问题