POI读取空行、跳过空行读取等问题解决

1、解决POI在读取文件名时不能读取名字中含有标点符号“.”的解决方案。

String fileSuffix =myfile.getOriginalFilename().substring(myfile.getOriginalFilename().lastIndexOf(".")); //获取文件的后缀名.xls

String filePrefix = myfile.getOriginalFilename().substring(0,myfile.getOriginalFilename().lastIndexOf(".")); //获取文件的

2、解决POI能够兼容07以下的Excel格式和07以上的Excel格式。

Workbook wb= null;

FormulaEvaluator formulaEvaluator = null;

InputStream is = new FileInputStream(file);

//判断excel文件的版本,2007以上,以下的处理方式不一致

if (file.getName().endsWith("xlsx")) {

    wb = new XSSFWorkbook(is);

    formulaEvaluator = newXSSFFormulaEvaluator((XSSFWorkbook) wb);

扫描二维码关注公众号,回复: 1855803 查看本文章

              }

 else {

      wb = new HSSFWorkbook(is);

      formulaEvaluator = new HSSFFormulaEvaluator((HSSFWorkbook) wb);

              }

3、解决POI读取最大行数时将带格式空行读取或存在空行,导致批量导入失败的问题

Row row = sheet2.getRow(a);

//可以跳过空行去读取数据,解决末尾的带格式空行导致的的无法插入成功问题

if(a>=1){

      if(row==null){continue;}

else if(StringUtils.isEmpty(getValue(row.getCell(0)))&&StringUti

ls.isEmpty(getValue(row.getCell(1)))){

                         trace.info("存在为空的列");

                           continue;

                     

                    }

4、解决POI无法同时读取带多种格式的单元格表格

统一调用该方法读取单元格值

private String getValue(Cell cell){

       if (cell == null) {

               return"";

           }

       elseif(cell.getCellType() == cell.CELL_TYPE_BOOLEAN){ 

         return String.valueOf(cell.getBooleanCellValue());  

       }elseif(cell.getCellType() == cell.CELL_TYPE_NUMERIC){

         Stringvalue="";

         //检验是否为日期格式的数值类型

         if(DateUtil.isCellDateFormatted(cell)){

         value=df.format(cell.getDateCellValue());    

         }

         else{

         value=new DecimalFormat("0").format(cell.getNumericCellValue());

         }

         return value;

         //String.valueOf(cell.getNumericCellValue()); 

       }else

         return String.valueOf(cell.getStringCellValue()); 

       } 

     }


猜你喜欢

转载自blog.csdn.net/weixin_42324471/article/details/80473029
今日推荐