当前位置: 首页 > 知识库问答 >
问题:

无法使用POI在excel表中为空值插入数据

曹君墨
2023-03-14

我试图在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


          }
        }

}

下面是一段代码,我通过它标识空白/空值,并试图插入字符串,但它不写到那个单元格

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;
             }

共有1个答案

端木望
2023-03-14
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;
    }
}
 类似资料:
  • 我正在开发一个与Excel表相关的桌面应用程序。我在两行之间插入行时遇到一些问题。在使用ApachePOI的Java中是否有可能这样做?

  • 下面是代码:d:/poi.png中的图片(“d:/poi.png”) 我不认为处理图像的源代码有问题,但我不知道我错过了什么

  • 有冬眠和MSSQL环境。我遇到了一个错误:“无法将值NULL插入到“comment_id”列中,表“CHT”。dbo。记者"点评";;列不允许空值。“插入失败。”Hibernate配置: comment_id列在db中具有标识属性:如果我使用db客户端进行插入: 它非常适合我。 Hibernate日志: SQL-插入REPORTER_COMMENTS(REPORTERID, COMMENT,COM

  • 问题内容: 我一直在尝试删除我的excel文件中的空行的代码!我的代码是: 该代码完全无效。有谁能告诉我是什么问题,请帮助我,自最近10个小时以来,我一直在尝试做这件事。提前致谢! 问题答案: 当任何行为空白时,将有两种情况。 首先,该行位于其他行之间,但永远不会初始化或创建。在这种情况下, Sheet.getRow(i)将为null。 其次,行已创建,其单元格可能会或可能不会被使用,但现在其所有

  • Apache POI>无法读取Excel表 null } Excel文件

  • 我有一个通过express连接的SQLite数据库,并且有使用express路由连接前端和后端的控制器。 表数据库 Knex插入行 反应前端 这里的问题是在前端,当我使用时,我得到的值为null,但当我用“text”替换stock.symbol,我得到的值为text。我在这里做错了什么?谢谢! 附注-这是常量存货