无法使用POI在Excel工作表中为空值插入数据

时间:2012-08-21 09:19:05

标签: java apache-poi

我正在尝试在excel(xlsx)表中找到一个空白值,并使用我的Apache POI库程序替换为“ENTER VALUE”之类的字符串,如下所示

我能够在Excel工作表中读取和识别空白/空值,但无法在这些单元格中插入任何值

public static void main(String args[]) throws IOException, InvalidFormatException
    {



                FileInputStream inputFile = new FileInputStream("//Users//suk//Documents/tes//testexcel.xlsx");

        //now initializing the Workbook with this inputFie


        // Create workbook using WorkbookFactory util method

         Workbook wb = WorkbookFactory.create(inputFile);

         // creating helper for writing cells

         CreationHelper createHelper = wb.getCreationHelper();

        // setting the workbook to handle null

         wb.setMissingCellPolicy(Row.CREATE_NULL_AS_BLANK);


        Sheet sheet = wb.getSheetAt(0);


        for (Row row : sheet) {
            int lastCellNo =row.getLastCellNum();
            int firstCellNo=row.getFirstCellNum();

            int rowNo =row.getRowNum();
            System.out.println(" row number = "+rowNo);
            System.out.println(" last cell no = "+lastCellNo);


            for(int i=firstCellNo;i<lastCellNo;i++){
                System.out.println("************");

                Cell cell = row.getCell(i);
                int colIndex =cell.getColumnIndex();
                if(cell==null)
                {
                    System.out.println(" The Cell:"+colIndex+" for row "+row.getRowNum()+" is NULL");
                }




              System.out.println(" column  index  = "+colIndex);


             int cellType = cell.getCellType();
             System.out.println(" cell type ="+cellType);

             // writing a switch case statement

             switch(cellType)
             {

             case 0:
             {
                double numValue = cell.getNumericCellValue();
                //System.out.println(numValue);
                 break;
             }
             case 1:
             {
                 String cellString = cell.getStringCellValue();
                 System.out.println("----String value = "+cellString+"---String length ="+cellString.length());

                 // here checking null consition

            /*   if(cellString == null || cellString.equalsIgnoreCase("") || cellString.length()<=0 || cellString.equalsIgnoreCase(" "))
                 {
                     // here creating the cell value after last cell


                 } */
                 break;
             }
             case 4:
             {
                  boolean bolValue =cell.getBooleanCellValue();
                  //System.out.println(bolValue);
                  break;
             }

             // for case of blank cell

             case 3:
             {

                 //int lastCellPlus =lastCellNo+1;
                 //System.out.println("last+1 column ="+lastCellPlus);
                 //row.createCell(lastCellPlus).setCellValue(" NULL VALUE..PLEASE ENTER VALUE ");

                 System.out.println(" cell details = "+cell.getColumnIndex()+" row details ="+row.getRowNum());
                 cell.setCellValue(createHelper.createRichTextString("ENTER VALUE"));
                 System.out.println(" Sucessfully written error");

                  break;
             }


             default: 
                 System.out.println(" unknown format");
                 break;

             }// switch

          } // row and cell iterator


          }
        }

}

下面是我识别其Blank / Null值并尝试插入String但不写入该单元格的代码位

case 3:
             {

                 //int lastCellPlus =lastCellNo+1;
                 //System.out.println("last+1 column ="+lastCellPlus);
                 //row.createCell(lastCellPlus).setCellValue(" NULL VALUE..PLEASE ENTER VALUE ");

                 System.out.println(" cell details = "+cell.getColumnIndex()+" row details ="+row.getRowNum());
                 cell.setCellValue(createHelper.createRichTextString("ENTER VALUE"));
                 System.out.println(" Sucessfully written error");

                  break;
             }

2 个答案:

答案 0 :(得分:4)

if(row.getCell(0))==null || getCellValue(row.getCell(0)).trim().isEmpty()){
   cell.setCellValue("ENTER VALUE");

}

private String getCellValue(Cell cell) {
    if (cell == null) {
        return null;
    }
    if (cell.getCellType() == Cell.CELL_TYPE_STRING) {
        return cell.getStringCellValue();
    } else if (cell.getCellType() == Cell.CELL_TYPE_NUMERIC) {
        return cell.getNumericCellValue() + "";
    } else if (cell.getCellType() == Cell.CELL_TYPE_BOOLEAN) {
        return cell.getBooleanCellValue() + "";
    }else if(cell.getCellType() == Cell.CELL_TYPE_BLANK){
        return cell.getStringCellValue();
    }else if(cell.getCellType() == Cell.CELL_TYPE_ERROR){
        return cell.getErrorCellValue() + "";
    } 
    else {
        return null;
    }
}

答案 1 :(得分:1)

这应该可以正常工作:

Sheet s = wb.getSheetAt(0);
for (int rn=0; rn<s.getLastRowNum(); rn++) {
    Row r = s.getRow(rn);
    if (r == null) {
       // No values exist in this row
       r = s.createRow(rn);
    }

    int minColumnsPerRow=10; // Fix for your needs
    for (int cn=0; cn<minColumnsPerRow; cn++) {
       Cell c = r.getCell(cn);
       if (c == null || c.getCellType() == Cell.CELL_TYPE_BLANK) {
           // This cell is empty
           if (c == null) { 
              c = r.createCell(cn, Cell.CELL_TYPE_STRING);
           }
           cell.setCellValue(createHelper.createRichTextString("ENTER VALUE"));
       }
    }
 }

请记住,单元格可以为空或空(从不使用),行可以为空(从不使用)