首页 > 系统相关 >解决POI读取Excel内存溢出的问题

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

时间:2023-08-25 13:04:34浏览次数:30  
标签:String area POI Excel getStringCellValue 内存 getCell row


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


标签:String,area,POI,Excel,getStringCellValue,内存,getCell,row
From: https://blog.51cto.com/u_9406185/7229161

相关文章

  • java内存管理 美好的期望与现实的残酷
    美好的期望---看山是山,看水是水犹记得当年刚入门学Java课时;99%的java基础性书籍和带领入门的老师都会介绍java的一项优点;即:Java语言不使用指针,它加入了垃圾回收机制,解决了程序员需要管理内存的问题,使编程变得更加简单。刚开始接触这段话时,心理感觉java语言太优秀了,尤其是在大一学......
  • # yyds干货盘点 # 通过pandas读取excel的数据,但是读取的结果显示后面四位变了?
    大家好,我是皮皮。一、前言前几天在Python最强王者群【wen】问了一个Pandas数据处理的问题,一起来看看吧。请教:通过pandas读取exlce的数据,其中,A列的数据为账号数字,原数据为6226093585801315,但是读取的结果显示6226093585800672,后面四位变了。df=pd.read_excel('销售数据.xlsx').conb......
  • 系统内存管理:虚拟内存、内存分段与分页、页表缓存TLB以及Linux内存管理
    虚拟内存虚拟内存是一种操作系统提供的机制,用于将每个进程分配的独立的虚拟地址空间映射到实际的物理内存地址空间上。通过使用虚拟内存,操作系统可以有效地解决多个应用程序直接操作物理内存可能引发的冲突问题。在使用虚拟内存的情况下,每个进程都有自己的独立的虚拟地址空间,它......
  • 导入导出(Excel)vue
     导入导出(Excel)首先 vue安装插件 (最后有完整代码)npm install xlsx file-saver其次:简单的导出按钮代码:<template>  <div>    <el-button type="primary" @click="exportExcel">导出 Excel</el-button>    <input      type="file&qu......
  • Pandas处理excel
    基本使用pandas是一个用于数据处理和分析的python库,提供了许多数据结构,其中最常用的是DataFrame和Series。创建DataFrame:可以使用字典或二维数组来创建Forexample: importpandasaspd data={'A':[1,2,3],'B':[4,5,6]} df=pd.DataFrame(data)读取和写入......
  • 临时导出excel,直接html代码复制进excel里面可以直接变成表格
    临时导出excel,直接html代码复制进excel里面可以直接变成表格 p标签和br会导致分成两个单元格可以在外面的标签身上加,或者br上面加 br{       mso-data-placement:same-cell;    } 这样子br不会被分成另个,只是同一个单元格换行了 开发web系统......
  • 删除Excel表格中第一个字符
    函数=MID(A1,2,LEN(A1)-1)示例1:2:......
  • springBoot 整合 poi 导出带有复杂表格(合并表格)的word文件
    1.Maven依赖见上一篇文章直接贴源码如下:packagecom.mingx.pms.web.system.file;importcn.hutool.core.date.DateUtil;importcom.mingx.pms.constant.SystemInfo;importcom.mingx.pms.entities.workplan.plan.vo.WorkPlanDetailExportVO;importcom.mingx.pms.entities......
  • STATA 导出EXCEL 行数过多 原因 及应对
    stata导出到EXCEL:报错:.exportexcelusing"D:\te\安徽.xlsx",>firstrow(variables)observationsmustbebetween1and1048576r(198);是因为XLSX最大行数限制将文件分成多个导出,分别小于1048576即可keepin1/1048575.exportexcelusing"D:\te\安徽1.xlsx",first......
  • Redis 内存淘汰策略&&过期策略
    学习:https://juejin.cn/post/7243987464297070647?searchId=202308240836335CB2B5EBDCD1879D6FB1https://www.bilibili.com/video/BV1bo4y1E7TK/?spm_id_from=333.337.search-card.all.click&vd_source=46d50b5d646b50dcb2a208d3946b1598......