Springboot 前后端分离项目使用 POI 生成并导出 Excel

简介: Springboot 前后端分离项目使用 POI 生成并导出 Excel

在做一个 SpringBoot 前后端分离项目的时候,需要将数据存到 Excel中,用户可以下载 Excel。具体实现是采用 Apache 强大的 POI。文章最后将源码例出。image.gif

POI API 文档: https://poi.apache.org/apidocs/dev/index.html

步骤

  1. 导入 POI 的 maven 依赖
<dependency><groupId>org.apache.poi</groupId><artifactId>poi</artifactId><version>5.1.0</version></dependency><dependency><groupId>org.apache.poi</groupId><artifactId>poi-ooxml</artifactId><version>5.1.0</version></dependency>
  1. 使用 produces 设置响应类型和编码为 “application/octet-stream”。
@RequestMapping(value="/down", produces=MediaType.APPLICATION_OCTET_STREAM_VALUE)
  1. 通过使用 SXSSFWorkbook 设置 Excel 表
SXSSFWorkbookworkbook=newSXSSFWorkbook();
//设置表格名称SXSSFSheetsheet=workbook.createSheet("销售榜单");
//设置表格默认宽度30sheet.setDefaultColumnWidth(30);
//设置 sheet 表格的第0行SXSSFRowrow=sheet.createRow(0);
//设置 sheet 表格的第0行第0列的值row.createCell(0).setCellValue("商品名称");
//设置 sheet 表格的第0行第1列的值row.createCell(1).setCellValue("数量");
  1. 设置响应头
//设置响应头response.setHeader("Access-Control-Expose-Headers", "Content-Disposition");
response.setHeader("Content-disposition", "attachment;filename="+URLEncoder.encode(fileName, "UTF-8"));
//filename 为 Excel 文件名称
  1. 获取 response 的输出流,通过输出流将 Excel 输出。
//将 Excel 表输出到输出流OutputStreamout=response.getOutputStream();
workbook.write(out);

样例代码

//1、通过 SXSSFWorkbook 设置 Excel 表//2、设置响应头//3、输出流输出@RequestMapping(value="/down", produces=MediaType.APPLICATION_OCTET_STREAM_VALUE)
publicvoiddownXlsx(HttpServletResponseresponse) {
//设置表名StringfileName="销售榜单.xlsx";
SXSSFWorkbookworkbook=newSXSSFWorkbook();
//设置表格名称SXSSFSheetsheet=workbook.createSheet("销售榜单");
//设置表格默认宽度30sheet.setDefaultColumnWidth(30);
//设置 sheet 表格的第0行SXSSFRowrow=sheet.createRow(0);
//设置 sheet 表格的第0行第0列的值row.createCell(0).setCellValue("商品名称");
//设置 sheet 表格的第0行第1列的值row.createCell(1).setCellValue("数量");
OutputStreamout=null;
try {
//设置响应头response.setHeader("Access-Control-Expose-Headers", "Content-Disposition");
response.setHeader("Content-disposition", "attachment;filename="+URLEncoder.encode(fileName, "UTF-8"));
//将 Excel 表输出到输出流out=response.getOutputStream();
workbook.write(out);
out.flush();
    } catch (Exceptione) {
e.printStackTrace();
    } finally {
workbook.dispose();
try {
if (out!=null)
out.close();
        } catch (IOExceptione) {
e.printStackTrace();
        }
    }
}
目录
相关文章
|
1天前
|
JSON Rust 前端开发
【sheetjs】纯前端如何实现Excel导出下载和上传解析?
本文介绍了如何使用`sheetjs`的`xlsx`库在前端实现Excel的导出和上传。项目依赖包括Vite、React、SheetJS和Arco-Design。对于导出,从后端获取JSON数据,通过`json_to_sheet`、`book_new`和`writeFile`函数生成并下载Excel文件。对于上传,使用`read`函数将上传的Excel文件解析为JSON并发送至后端。完整代码示例可在GitHub仓库[fullee/sheetjs-demo](https://github.com/fullee/sheetjs-demo)中查看。
31 10
|
3天前
|
Java Apache 索引
POI操作大全(动态合并单元格,为单元格生成一个自定义的数据显示格式,自定义公式计算结果生成,读取excel,word文件在生成图片,word指定位置生成图片)
POI操作大全(动态合并单元格,为单元格生成一个自定义的数据显示格式,自定义公式计算结果生成,读取excel,word文件在生成图片,word指定位置生成图片)
|
4天前
|
开发框架 资源调度 JavaScript
uniapp本地导出表格excel
uniapp本地导出表格excel
|
5天前
|
前端开发 关系型数据库 MySQL
【MySQL × SpringBoot 突发奇想】全面实现流程 · 数据库导出Excel表格文件的接口
【MySQL × SpringBoot 突发奇想】全面实现流程 · 数据库导出Excel表格文件的接口
27 0
|
5天前
|
JavaScript
vue导出excel无法打开问题
vue导出excel无法打开问题
|
5天前
|
easyexcel
【EasyExcel】第二篇:导出excel文件,导出多个sheet工作空间
【EasyExcel】第二篇:导出excel文件,导出多个sheet工作空间
|
5天前
|
SQL 数据库连接 数据库
【SQL Server】2. 将数据导入导出到Excel表格当中
【SQL Server】2. 将数据导入导出到Excel表格当中
51 0
|
5天前
|
NoSQL 关系型数据库 MySQL
多人同时导出 Excel 干崩服务器?怎样实现一个简单排队导出功能!
业务诉求:考虑到数据库数据日渐增多,导出会有全量数据的导出,多人同时导出可以会对服务性能造成影响,导出涉及到mysql查询的io操作,还涉及文件输入、输出流的io操作,所以对服务器的性能会影响的比较大;结合以上原因,对导出操作进行排队; 刚开始拿到这个需求,第一时间想到就是需要维护一个FIFO先进先出的队列,给定队列一个固定size,在队列里面的人进行排队进行数据导出,导出完成后立马出队列,下一个排队的人进行操作;还考虑到异步,可能还需要建个文件导出表,主要记录文件的导出情况,文件的存放地址,用户根据文件列表情况下载导出文件。
多人同时导出 Excel 干崩服务器?怎样实现一个简单排队导出功能!
|
5天前
|
JavaScript 前端开发
【导出Excel】Vue实现导出下载Excel文件(blob文件流)--亲测可用
【导出Excel】Vue实现导出下载Excel文件(blob文件流)--亲测可用
【导出Excel】Vue实现导出下载Excel文件(blob文件流)--亲测可用
|
5天前
|
Java
java导出复杂excel
java导出复杂excel