当前位置 : 主页 > 手机开发 > harmonyos >

解决POI读取Excel内存溢出的问题

来源:互联网 收集:自由互联 发布时间:2023-08-25
POI读取Excel有两种模式,一种是用户模式,一种是SAX模式,将xlsx格式的文档转换成CVS格式后再进行处理用户模式相信大家都很清楚,也是POI常用的方式,用户模式API接口丰富,我们可以


POI读取Excel有两种模式,一种是用户模式,一种是SAX模式,将xlsx格式的文档转换成CVS格式后再进行处理用户模式相信大家都很清楚,也是POI常用的方式,用户模式API接口丰富,我们可以很容易的使用POI的API读取Excel,但用户模式消耗的内存很大,当遇到很多sheet、大数据网格、假空行、公式等问题时,很容易导致内存溢出。POI官方推荐解决内存溢出的方式使用CVS格式解析,

<!-- 导入导出 -->
        <dependency>
	    	<groupId>org.apache.poi</groupId>
	   		<artifactId>poi</artifactId>
	    	<version>3.15</version>
	</dependency>
public List<Area> importXLS(){
       ArrayList<Area> list = new ArrayList<>();
       try {
           //1、获取文件输入流
         InputStream inputStream = new FileInputStream("/Users/Shared/区域数据.xls");
          //2、获取Excel工作簿对象
           HSSFWorkbook workbook = new HSSFWorkbook(inputStream);
          //3、得到Excel工作表对象
           HSSFSheet sheetAt = workbook.getSheetAt(0);
           //4、循环读取表格数据
         for (Row row : sheetAt) {
            //首行(即表头)不读取
              if (row.getRowNum() == 0) {
                  continue;
              }
              //读取当前行中单元格数据,索引从0开始
         String areaNum = row.getCell(0).getStringCellValue(); 
              String province = row.getCell(1).getStringCellValue();
              String city = row.getCell(2).getStringCellValue();
              String district = row.getCell(3).getStringCellValue();
              String postcode = row.getCell(4).getStringCellValue();
  
              Area area = new Area();
              area.setCity(city);
              area.setDistrict(district);
              area.setProvince(province);
         area.setPostCode(postcode);
              list.add(area);
           }
         //5、关闭流
           workbook.close();
        } catch (IOException e) {
                e.printStackTrace();
        }
         return list;
        }


上一篇:Element 组件的二次封装:图标选择器
下一篇:没有了
网友评论