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

使用Apache POI的SXSSFworkbook实现大量数据导出到Excel文件

Apache POI是一个开源的、用来读写微软Excel文件的Java工具包,一般用来读取Excel文件中的数据或者将数据导出到Excel文件。HSSFWorkbook用来处理早期版本的Excel文件(xls格式),而XSSFWorkbook用来处理新版本Excel文(xlsx格式)。

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

  • HSSFWorkbook:一般用于操作Excel2003以前(包括2003)的版本,扩展名是.xls。
  • XSSFWorkbook:一般用于操作Excel2007及以上的版本,扩展名是.xlsx。
  • SXSSFWorkbook(POI 3.8+版本):一般用于大数据量的导出。比如数据量超过5000条即可考虑这种工作表
    ————————————————
    引用原文链接:https://blog.csdn.net/wh445306/article/details/103755283

使用SXSSFWorkbook导出Excel的代码如下

import org.apache.poi.ss.usermodel.CellStyle;
import org.apache.poi.ss.usermodel.CellType;
import org.apache.poi.ss.usermodel.DataFormat;
import org.apache.poi.ss.usermodel.HorizontalAlignment;
import org.apache.poi.xssf.streaming.SXSSFCell;
import org.apache.poi.xssf.streaming.SXSSFRow;
import org.apache.poi.xssf.streaming.SXSSFSheet;
import org.apache.poi.xssf.streaming.SXSSFWorkbook;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;import java.io.File;
import java.io.FileOutputStream;
import java.util.List;/*** 将数据导出成Excel文件,使用Apache POI组件。* Java POI三种Workbook:HSSFworkbook,XSSFworkbook,SXSSFworkbook主要区别:https://blog.csdn.net/wh445306/article/details/103755283*/
public class ExportExcelUtil {private static final Logger logger = LoggerFactory.getLogger(ExportExcelUtil.class);/*** 创建Excel文件内容,并写入本地文件。** @param headers  Excel表格头* @param cellList Excel表格数据内容* @param path     存储路径,如:"D:/xxx.xlsx"*/public static void writeExcelToFile(String[] headers, List<Object[]> cellList, String path) {FileOutputStream fos = null;try {File excelFile = new File(path);fos = new FileOutputStream(excelFile);//使用SXSSFWorkbook导出数据,可以防止数据量过大时,内存被耗尽问题SXSSFWorkbook swb = new SXSSFWorkbook(); //一般用于大数据量的导出,比如数据量超过5000条即可考虑这种工作表SXSSFSheet sheet = swb.createSheet("Sheet1");DataFormat format = swb.createDataFormat();CellStyle style = swb.createCellStyle();style.setAlignment(HorizontalAlignment.LEFT); //单元格左对齐style.setDataFormat(format.getFormat("@")); //设置单元格为文本格式SXSSFRow headerRow = sheet.createRow(0); //第一行标题部分for (int i = 0; i < headers.length; i++) {String headerName = headers[i];SXSSFCell cell = headerRow.createCell(i); //从0开始cell.setCellValue(headerName);cell.setCellType(CellType.STRING); //单元格内容为文本类型cell.setCellStyle(style);}int dataRow = 1; //数据部分,从第2行开始for (Object[] objArr : cellList) {SXSSFRow row = sheet.createRow(dataRow); //创建一行for (int i = 0; i < objArr.length; i++) {String text = objArr[i] != null ? objArr[i].toString() : "";SXSSFCell cell = row.createCell(i); //从0开始cell.setCellValue(text);cell.setCellStyle(style);}dataRow++;}swb.write(fos);fos.flush();}catch (Exception e) {logger.error("[writeExcelToFile][path:{}][ERROR:{}]", path, e.getMessage(), e);}finally {try {if (fos != null) {fos.close();}} catch (Exception e) {logger.error("[writeExcelToFile][close IOException:{}]", e.getMessage(), e);}}}
}

参考文章

参考了文章:Java POI三种Workbook:HSSFworkbook,XSSFworkbook,SXSSFworkbook主要区别
https://blog.csdn.net/wh445306/article/details/103755283

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

相关文章:

  • 【技术选型】Java 定时任务
  • 让你立刻学会指针
  • 重塑元宇宙体验!元宇宙实时云渲染解决方案来了
  • Node【Global全局对象】
  • 【技术】《Netty》从零开始学netty源码(四十一)之PoolChunk
  • 新建虚拟机更改ip(连接xshell)
  • 什么是VBST和PVST?两者有啥区别?
  • 记录-JavaScript常规加密技术
  • 二十三、高级网络技术及应用——BFD解析
  • 大家经常说的java八股文到底是什么?让我来总结一下吧!
  • C++备忘录模式实践:轻松实现撤销与恢复功能
  • 如何选择CDN加速平台?
  • 其实苹果知道自己离不开中国制造,因此悄悄给自己留了后路
  • 必用WhatsApp营销的4个理由
  • Python从入门到精通9天(异常的处理)
  • 微服务学习——Docker
  • QMS-云质说质量 - 5 解决中小企业质量问题的钥匙在哪里?
  • 基于Java+Spring+vue+element社区疫情服务平台设计和实现
  • 实战项目:手把手带你实现一个高并发内存池
  • 原理这就是索引下推呀
  • 个人通讯录(二)
  • DockerK8S常见面试知识
  • tcpdump arping nsenter
  • Python - 简单快速回忆基础语法
  • 蓝牙耳机接打电话哪个比较好?接打电话最好的蓝牙耳机
  • DeepSORT中的卡尔曼滤波
  • 【Linux网络服务】SSH远程访问及控制
  • AutoGPT的出现,会让程序员失业吗?
  • 微信小程序php+vue 校园租房指南房屋租赁系统
  • 水果FL Studio21最新中文完整版下载更新及内容介绍