当前位置: 首页 > news >正文

java根据poi解析excel内容

一.HSSFWorkbook、XSSFWorkbook、SXSSFWorkbook

Apache POI包中的HSSFWorkbook、XSSFWorkbook、SXSSFWorkbook的区别如下:

HSSFWorkbook:一般用于操作Excel2003以前(包括2003)的版本,扩展名是.xls。
XSSFWorkbook:一般用于操作Excel2007及以上的版本,扩展名是.xlsx。
SXSSFWorkbook(POI 3.8+版本):一般用于大数据量的导出。比如数据量超过5000条即可考虑这种工作表
第一种:HSSFWorkbook

针对EXCEL 2003版本,扩展名为.xls,此种的局限就是导出的行数最多为65535行。因为导出行数受限,不足7万行,所以一般不会发送内存溢出(OOM)的情况

第二种:XSSFWorkbook

这种形式的出现是由于第一种HSSF的局限性产生的,因为其导出行数较少,XSSFWorkbook应运而生,其对应的是EXCEL2007+ ,扩展名为.xlsx ,最多可以导出104万行,不过这样就伴随着一个问题–OOM内存溢出。因为使用XSSFWorkbook创建的book sheet row cell 等是存在内存中的,并没有持久化到磁盘上,那么随着数据量的增大,内存的需求量也就增大。那么很有可能出现 OOM了,那么怎么解决呢?

第三种:SXSSFWorkbook  poi.jar 3.8+

SXSSFWorkbook可以根据行数将内存中的数据持久化写到文件中。

此种的情况就是设置最大内存条数,比如设置最大内存量为5000行,

new  SXSSFWookbook(5000),当行数达到 5000 时,把内存持久化写到文件中,以此逐步写入,避免OOM。这样就完美解决了大数据下导出的问题

另注:HSSFWorkbook的Excel Sheet导出条数上限(<=2003版)是65535行、256列,

          XSSFWorkbook的Excel Sheet导出条数上限(>=2007版)是1048576行,16384列,

         如果数据量超过了此上限,那么可以使用SXSSFWorkbook来导出。实际上上万条数据, 甚至上千条数据就可以考虑使用               SXSSFWorkbook了。

附apache poi 官网地址

Apache POI - Component Overview

二.上代码

1.POI坐标依赖

<dependency><groupId>org.apache.poi</groupId><artifactId>poi-ooxml</artifactId><version>4.1.2</version>
</dependency>

2.POI核心API概述

2.1 创建工作簿对象

Workbook workbook=new XSSFWorkbook(path)

2.2 获取execl表中的sheet对象

Sheet sheet = workbook.getSheetAt(0);

2.3 获取excel文件中所有物理数据的有效行数

int rows = sheet.getPhysicalNumberOfRows()

2.4 获取行对象

Row row =sheet.getRow(i)

2.5 获取行中的列对象

Cell cell=row.getCell(0)

2.6 获取列的字符串类型数据

cell.getStringCellValue()

 2.7 获取列的数字类型字段数据

cell.getNumericCellValue()

  2.8 将单元格的内容转换为字符串类型数据,配合3.6使用

cell.setCellType(CellType.STRING);

 3.实操代码

 public R<String> batchSaveUserInfo(MultipartFile multipartFile){R<String> result = new R<>();result.setCode(200);result.setSuccess(false);Workbook workbook = null;InputStream inputStream = null;try {//传入的MultipartFile类型的excel文件inputStream = multipartFile.getInputStream();String originalFilename = multipartFile.getOriginalFilename();//判断是否为2017版本,如果是xlsx,就是XSSFWorkbook,如果是xls,就是HSSFWorkbookif (originalFilename.matches("^(?i)(xlsx)$")) {workbook = new XSSFWorkbook(inputStream);} else {workbook = new HSSFWorkbook(inputStream);}//得到excel第一个工作表sheet对象Sheet sheet = workbook.getSheetAt(0);//得到总行数int rowNum = sheet.getPhysicalNumberOfRows();} catch (IOException e) {e.printStackTrace();} finally {if (workbook != null) {try {workbook.close();} catch (IOException e) {e.printStackTrace();}}if (inputStream != null) {try {inputStream.close();} catch (IOException e) {e.printStackTrace();}}}result.setMessage("文件解析失败");return result;}


————————————————
原文链接:https://blog.csdn.net/wh445306/article/details/103755283

使用POI技术实现excel文件的导入,亲测有效! - 知乎 (zhihu.com)

java读取Excel文件cell.setCellType(); 过期 - 知乎 (zhihu.com)

http://www.lryc.cn/news/102519.html

相关文章:

  • 实验报告-Sublime配置默认语法,以配置Verilog语法为例
  • pve安装ikuai并设置,同时把pve的网络连接到ikuai虚拟机
  • Android 面试题 ANR 五
  • 实训笔记7.28
  • C 游游的二进制树
  • 收发存和进销存有什么区别?
  • 小程序 账号的体验版正式版的账号信息及相关配置
  • AIGC(Artificial Intelligence Generated Content)和 Web3对比,未来发展
  • 机器学习之Boosting和AdaBoost
  • 汇编语言预定义寄存器和协处理器
  • 【前缀和】974. 和可被 K 整除的子数组
  • linux页框回收之shrink_node函数源码剖析
  • 网络运维基础问题及解答
  • 【RabbitMQ】之保证数据不丢失方案
  • 插入排序算法
  • Linux标准库API
  • 腾讯云—自动挂载云盘
  • 为Win12做准备?微软Win11 23H2将集成AI助手:GPT4免费用
  • Opencv Win10+Qt+Cmake 开发环境搭建
  • Matlab实现光伏仿真(附上30个完整仿真源码)
  • JSON.stringify()与JSON.parse()
  • neo4j教程-安装部署
  • 网络面试合集
  • java+springboot+mysql智慧办公OA管理系统
  • 【教程】Tkinter实现Python软件自动更新与提醒
  • 音频深度学习变得简单:自动语音识别 (ASR),它是如何工作的
  • 反射简述
  • Kotlin泛型的协变与逆变
  • 【后端面经】微服务构架 (1-6) | 隔离:如何确保心悦会员体验无忧?唱响隔离的鸣奏曲!
  • 复习之kickstart无人职守安装脚本