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

              }

 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()); 

       } 

     }


  • 5
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 5
    评论
在使用POI读取Excel文件时,如果遇到大量的空行,可能会导致内存溢出的问题。这是因为POI读取Excel文件时会将整个文件的内容全部加载到内存中,而空行并没有实际的数据内容,但仍然会占用内存空间。 解决这个问题的方法有以下几种: 1. 使用逐行读取的方式:通过POI提供的API,可以逐行读取Excel文件的内容,而不是将整个文件加载到内存中。这样可以有效地避免空行占用过多的内存空间。 2. 添加筛选条件:在读取Excel文件时,可以添加筛选条件,只读取有效的数据行,而忽略空行。可以通过判断某一行是否为空行的方式,进行过滤。 3. 设置最大行数限制:可以设置最大行数的限制,当达到设定的最大行数时,停止继续读取Excel文件。这样可以避免读取过多的空行,从而减少内存占用。 4. 对大文件进行分块处理:如果Excel文件太大,无法完全加载到内存中,可以将文件进行分块处理,每次读取一部分内容,然后进行处理,这样可以避免一次性读取整个文件导致内存溢出。 需要注意的是,以上方法仅仅是针对空行导致的内存溢出问题,如果Excel文件本身非常大,仍然可能会出现内存溢出的情况。为了避免此类问题,可以考虑采取其他的解决方案,例如使用数据库进行存储和查询,或者使用分布式处理来处理大规模的数据。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值