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

springBoot 通过模板导出Excel文档的实现

springBoot 通过模板导出Excel文档的实现是我们常用的功能,今天我们分享一下:

1、pom.xml中引用包

<dependencies><!-- SpringBoot Web --><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><!-- Apache POI - Excel 处理 --><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.commons</groupId><artifactId>commons-lang3</artifactId><version>3.12.0</version></dependency>
</dependencies>

2、用户实体

package com.example.demo.entity;import lombok.Data;import java.util.Date;@Data
public class User {private Long id;private String name;private Integer age;private String gender;private Date createTime;
}

3、控制层代码

package com.example.demo.controller;import com.example.demo.entity.User;
import com.example.demo.service.ExcelExportService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;@RestController
@RequestMapping("/api/excel")
public class ExcelExportController {@Autowiredprivate ExcelExportService excelExportService;@GetMapping("/export")public void exportUsers(HttpServletResponse response) throws IOException {// 模拟数据List<User> userList = createSampleUsers();// 导出ExcelexcelExportService.exportUsersWithTemplate(userList, response);}private List<User> createSampleUsers() {List<User> userList = new ArrayList<>();User user1 = new User();user1.setId(1L);user1.setName("张三");user1.setAge(25);user1.setGender("男");user1.setCreateTime(new Date());User user2 = new User();user2.setId(2L);user2.setName("李四");user2.setAge(30);user2.setGender("女");user2.setCreateTime(new Date(System.currentTimeMillis() - 86400000));userList.add(user1);userList.add(user2);return userList;}
}

4、业务层代码

package com.example.demo.service;import com.example.demo.entity.User;
import org.apache.poi.ss.usermodel.*;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;
import org.springframework.core.io.ClassPathResource;
import org.springframework.stereotype.Service;import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.URLEncoder;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.List;@Service
public class ExcelExportService {public void exportUsersWithTemplate(List<User> userList, HttpServletResponse response) throws IOException {// 设置响应头response.setContentType("application/vnd.openxmlformats-officedocument.spreadsheetml.sheet");response.setCharacterEncoding("utf-8");String fileName = URLEncoder.encode("用户信息_" + new SimpleDateFormat("yyyyMMddHHmmss").format(new Date()) + ".xlsx", "UTF-8");response.setHeader("Content-disposition", "attachment;filename=" + fileName);// 读取模板文件ClassPathResource resource = new ClassPathResource("templates/user_template.xlsx");InputStream inputStream = resource.getInputStream();Workbook workbook = new XSSFWorkbook(inputStream);Sheet sheet = workbook.getSheetAt(0); // 获取第一个工作表// 获取模板中的样式(假设模板第1行为表头)Row headerRow = sheet.getRow(0);CellStyle[] cellStyles = new CellStyle[headerRow.getLastCellNum()];for (int i = 0; i < cellStyles.length; i++) {cellStyles[i] = headerRow.getCell(i).getCellStyle();}// 从第2行开始写入数据int rowNum = 1;for (User user : userList) {Row row = sheet.createRow(rowNum++);// 创建单元格并设置值createCell(row, 0, user.getId(), cellStyles[0]);createCell(row, 1, user.getName(), cellStyles[1]);createCell(row, 2, user.getAge(), cellStyles[2]);createCell(row, 3, user.getGender(), cellStyles[3]);// 日期格式化if (user.getCreateTime() != null) {createCell(row, 4, new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(user.getCreateTime()), cellStyles[4]);}}// 输出文件OutputStream outputStream = response.getOutputStream();workbook.write(outputStream);workbook.close();outputStream.flush();outputStream.close();}private void createCell(Row row, int column, Object value, CellStyle style) {Cell cell = row.createCell(column);cell.setCellStyle(style);if (value == null) {cell.setCellValue("");return;}if (value instanceof String) {cell.setCellValue((String) value);} else if (value instanceof Integer) {cell.setCellValue((Integer) value);} else if (value instanceof Long) {cell.setCellValue((Long) value);} else {cell.setCellValue(value.toString());}}
}

5、创建Excel 模板

在 src/main/resources/templates 目录下创建 user_template.xlsx 文件,设置表头如下:

调用后端接口导出excel文档。

到此,springBoot 通过模板导出Excel文档的实现分享完成,下篇分享视频和图片的上传下载等功能,敬请期待!

相关文章:

  • 第一章 计算机系统构成及硬件基础知识
  • 基于Java的离散数学题库系统设计与实现:附完整源码与论文
  • Web前端基础:JavaScript
  • 混合云数据库连接问题:本地与云实例的兼容性挑战
  • AI推理服务的高可用架构设计
  • 如何区分 “通信网络安全防护” 与 “信息安全” 的考核重点?
  • 【JavaWeb】Docker项目部署
  • VirtualBox启动失败@Ubuntu22.04 说是配置文件有问题
  • 数组复制--System.arraycopy
  • Redis:现代应用开发的高效内存数据存储利器
  • 【HTTP三个基础问题】
  • 文件(保存)通讯录
  • win11无法打开.bat文件、打开.bat文件闪退解决方案,星露谷smapi mod安装时,.bat安装文件一闪而
  • 如何从浏览器中导出网站证书
  • bat批量去掉本文件夹中的文件扩展名
  • Windows 系统安装 Redis 详细教程
  • 辊式矫平机:金属板材的“整形大师”
  • 计算机基础知识(第五篇)
  • 在命令行直接执行可以执行成功,加入crontab定时任务执行shell脚本不成功失败的问题解决方法
  • 关于 汇编语言:1. 汇编语言基础
  • 做采购应该关注的网站/剪辑培训班一般学费多少
  • 如何能让企业做网站的打算/合肥网站推广公司排名
  • wordpress 全图片/优化大师破解版app
  • 做网站需要多长时间才能做好/北京网站托管
  • 苏州专业网站建设公司/网站报价
  • 网站营销的优缺点/义乌最好的电商培训学校