SpringBoot导出Excel

HSSFWorkbook、XSSFWorkbook、SXSSFWorkbook的区别:

HSSFWorkbook一般用于Excel2003版及更早版本(扩展名为.xls)的导出。
XSSFWorkbook一般用于Excel2007版(扩展名为.xlsx)的导出。
SXSSFWorkbook一般用于大数据量的导出。

注:HSSFWorkbook和XSSFWorkbook的Excel Sheet导出条数上限(<=2003版)是65535行、256列,(>=2007版)是
1048576行,16384列,如果数据量超过了此上限,那么可以使用SXSSFWorkbook来导出。实际上上万条数据,
甚至上千条数据就可以考虑使用SXSSFWorkbook了。

HSSSFWorkbook 和SXSSFWorkbook在导出excel workbook对象在执行write方法写入数据到ServletOutputStream时 是有点区别的

HSSFWorkbook在write方法执行完的时候并没有关闭流 ,所以我们可以对这个流统计大小来获取导出文件的大小,并且最后需要我们手动关闭
而SXSSFWorkbook的write方法把流关闭了,write方法执行完之后out流就空了拿不到大小了

SXSSFWorkbook是XSSFWorkbook的Streaming版本,实现了"BigGridDemo"的策略,在导出大量数据的时候,可以避免OOM。

<dependency><groupId>org.apache.poi</groupId><artifactId>poi</artifactId><version>4.1.2</version>
</dependency>
<dependency><groupId>org.apache.poi</groupId><artifactId>poi-ooxml</artifactId><version>4.1.2</version>
</dependency>
<dependency><groupId>org.apache.poi</groupId><artifactId>poi-ooxml-schemas</artifactId><version>4.1.2</version>
</dependency>
getFirstRowNum、getLastRowNum 起始都是0

接口代码

//上传Excel
@RequestMapping("/uploadDevMachine")
public Object uploadDevMachine(MultipartFile file) {int successCount = 0;//上传成功条数try {if(file == null || file.isEmpty()){return Rsp.end(Result.Err.ERR_NOT_EXISTS);}XSSFWorkbook workbook = new XSSFWorkbook(file.getInputStream());XSSFSheet sheet = workbook.getSheetAt(0);int lastRowNum = sheet.getLastRowNum();if(lastRowNum < 1){return Rsp.end(Result.Err.ERR_NO_RECORD);}logger.info("import file name:{}, lastRowNum:{}",file.getOriginalFilename(), lastRowNum);for(int i = 1; i <= lastRowNum; i++){XSSFRow row = sheet.getRow(i);//包装实体类DevMachine dm = new DevMachine();dm.number = row.getCell(0) == null ? "" : row.getCell(0).getStringCellValue();dm.name = row.getCell(1) == null ? "" : row.getCell(1).getStringCellValue();if(row.getCell(2) != null){dm.meterId = row.getCell(2).getStringCellValue();//计量插座Id唯一索引}if(row.getCell(3) != null){dm.tagId = row.getCell(3).getStringCellValue();电子标签Id唯一索引}dm.remark = row.getCell(4) == null ? "" : row.getCell(4).getStringCellValue();if(cu.isCustomer()){dm.customerId = cu.userId;//所属用户}//判断id是否为空XSSFCell cell = row.getCell(5);if(cell == null){dm.id = Misc.makeUuid();boolean add = devMachineService.addDevMachine(dm);if(add){successCount++;}}else{dm.id = cell.getStringCellValue();if(dm.id.length() > 20){boolean update = devMachineService.updateDevMachine(dm);if(update){successCount++;}}}}}catch(Exception e){e.printStackTrace();}return Rsp.end(Result.Err.SUCCESS, "上传成功条数:" + successCount);
}

前端代码

<el-dialog title="导入" width="30%" :visible.sync="handleUploadVisible"><el-upload class="upload-demo" drag style="display: inline-block;" action="#" :file-list="fileList" :on-change="handleChange" :limit="1" :http-request="dragSubmit" accept="application/vnd.openxmlformats-officedocument.spreadsheetml.sheet,application/vnd.ms-excel" :auto-upload="false"><i class="el-icon-upload"></i><div class="el-upload__text">将Excel文件拖到此处,或<em>点击上传</em></div><div class="el-upload__tip" slot="tip">提示:文件格式为.xlsx</div></el-upload><div class="dialog-footer" slot="footer"><el-button @click="handleUploadVisible=false">取消</el-button><el-button @click="exportDevMachine()">下载模板</el-button><el-button @click="doUploadFile()" slot="trigger">确定</el-button></div>
</el-dialog>

methods

handleUpload(){this.handleUploadVisible = true},handleChange(file, fileList){this.fileTemp = file.raw//console.log(file)},handleRemove(file, fileList){this.fileTemp = null;},dragSubmit(param){console.log('---dragSubmit param---')this.fileTemp = param.file;//fetchPost("uploadDevMachine", formData).then((rsp) => {})//自动上传},upload() {//console.log("do upload refs submit")this.$refs.upload.submit();},/* 手动上传excel文件 */doUploadFile(){if(this.fileTemp == null){this.$message.success("未选择上传的excel文件!")return}//console.log(this.fileList[0].raw)//console.log(this.fileTemp)//const formData = new FormData();formData.append("file", this.fileTemp);fetchPost("uploadData", formData).then((rsp) => {if (rsp.code == 0) {this.$message.success(rsp.msg)return}this.$message.error(rsp.msg)})},

参考地址
https://www.cnblogs.com/linjiqin/p/10975761.html

https://www.jianshu.com/p/3a89e19a1bc3

https://www.cnblogs.com/toutou/p/9857963.html

https://blog.csdn.net/typ1805/article/details/83279532

POI之SXSSFWorkbook大量数据导出至excel
https://blog.csdn.net/k_520_w/article/details/84404652

SpringBoot POI导出Excel相关推荐

  1. Springboot POI导出Excel(浏览器)

    需求:页面根据查询条件导出(浏览器) 由于本次导出数据量较大,这里采用XSSFWorkbook多线程进行导出,注:XSSFWorkbook导出excel文件结尾为:".xlsx". ...

  2. springboot中使用poi导出excel文件(亲测实现了第一个功能)

    1.POI简介 Jakarta POI 是一套用于访问微软格式文档的Java API. 组件HWPF用于操作Word的; 组件HSSF用于操作Excel格式文件. 2.常用组件 HSSFWorkboo ...

  3. Springboot利用poi导出excel下载

    Springboot利用poi导出excel下载 因为项目中之前的做法是用反射获取属性,所以demo中也是用的反射,我看网上很多文章都是存入一个List中,不知道这两种哪种更何合适一点,或者有什么更好 ...

  4. Springboot整合Poi导出excel(简单版)

    一. 问题引入 博客专栏: Springboot整合Poi导出excel(简单版) Springboot整合Poi导出excel(注解版) 总所周知Springboot是一个功能强大的微服务框架,集成 ...

  5. Springboot整合Poi导出excel(注解版)

    简介 博客专栏: Springboot整合Poi导出excel(简单版) Springboot整合Poi导出excel(注解版) 上文提到通过poi简单导出Excel后,很多读者反应需要解决导出自适应 ...

  6. Java:使用POI导出Excel文件后打开文件提示因为文件格式或文件扩展名无效而无法打开

    使用POI导出Excel文件后打开文件提示因为文件格式或文件扩展名无效而无法打开 问题 方案 问题 在SpringBoot项目中,使用POI导出查询结果至Excel文件中,成功导出后打开Excel文件 ...

  7. springboot项目导出excel 合并单元格表格

    springboot项目导出excel 合并单元格表格 导出效果 业务controller 业务数据 业务实体类 注解MyExcel.java 注解 MyExcels 导出工具类MyExcelUtil ...

  8. springboot+poi导出百万级数据避免OOM内存溢出

    springboot+poi导出百万级数据避免OOM内存溢出 文章目录 springboot+poi导出百万级数据避免OOM内存溢出 前言 一.具体实现 二.代码实现 1.引入poi包 2.功能代码 ...

  9. POI 导出excel带小数点的数字格式显示不对解决方法

    POI 导出excel带小数点的数字格式显示不对解决方法 参考文章: (1)POI 导出excel带小数点的数字格式显示不对解决方法 (2)https://www.cnblogs.com/firstd ...

最新文章

  1. DCN-2655 同异步端口PPP (chap)认证
  2. putty登陆sourceforge.net(设置登录)
  3. python算法与数据结构-快速排序算法
  4. 外挂学习之路(4)--- 大海捞针找call call const法
  5. gradle 构建包含源码配置
  6. word List 11
  7. 为什么我的数据库应用程序这么慢?
  8. 在线考试系统毕业设计设计过程及部分代码
  9. stm8单片机内部存储EEPROM字节读写实例解析
  10. 用 HBuilder X 编辑 Markdown 文档,如何自定义表格列宽
  11. 轻松打造自己的站内搜索引擎
  12. 视频转GIF动图MATLAB源码
  13. git clone与git pull区别
  14. mfc treectrl设置背景透明_微信透明头像怎么弄 专用透明头像图片更换设置教程闽南网...
  15. 解决Windows因更新导致C盘容量急剧减少
  16. linux文件名小写变大写命令,通过Ubuntu命令行将文件名转换为小写
  17. 这篇 python 文章,是过去你错过的 python 细节知识点,滚雪球第4季第15篇
  18. 对小米路由器提出严正批评,2.4G下,40MHz自动变20MHz
  19. css一个点,用纯CSS从一个点到另一个点绘制一条线(路径)
  20. prev_permutation 函数

热门文章

  1. oracle11g更改SID-DBname
  2. python 整行_python dataframe 输出结果整行显示的方法
  3. Android部分手机在使用EditText进行自动联想时会先输入拼音的问题
  4. 拖拽功能之水平拖动图片
  5. 《白帽子讲Web安全》浏览器安全
  6. 小程序-实现怎么跳转打开 H5 网页链接(或跳转至公众号文章)
  7. DIH增量、定时导入并检索数据--转载
  8. 百宝箱-Rime配置
  9. mac book外接4k 显示器 字体大小问题
  10. linux下syscall函数