当前位置: 首页 > 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文档的实现分享完成,下篇分享视频和图片的上传下载等功能,敬请期待!

http://www.xdnf.cn/news/918271.html

相关文章:

  • 几种简单的排序算法(C语言)
  • clickhouse 和 influxdb 选型
  • 【Android】浅析View.post()
  • rec_pphgnetv2完整代码学习(二)
  • 机器学习监督学习实战五:六种算法对声呐回波信号进行分类
  • [yolov11改进系列]基于yolov11引入轻量级下采样ContextGuided的python源码+训练源码
  • VBA之Word应用第三章第十节:文档Document对象的方法(三)
  • LeetCode--24.两两交换链表中的结点
  • Android USB 通信开发
  • 数组名作为函数参数详解 —— 指针退化及遍历应用示例
  • Oracle中的异常处理与自定义异常
  • Redis 与 MySQL 数据一致性保障方案
  • Ctrl-Crash 助力交通安全:可控生成逼真车祸视频,防患于未然
  • chili3d 笔记17 c++ 编译hlr 带隐藏线工程图
  • Jenkins持续集成CI,持续部署CD,Allure报告集成以及发送电子 邮件
  • STM32标准库-输入捕获
  • PySide6 GUI 学习笔记——常用类及控件使用方法(多行文本控件QTextEdit)
  • Redis高可用架构
  • CCPC chongqing 2025 H
  • PySide6 GUI 学习笔记——常用类及控件使用方法(单行文本控件QLineEdit)
  • Linux进程(中)
  • Java高级 |【实验八】springboot 使用Websocket
  • 174页PPT家居制造业集团战略规划和运营管控规划方案
  • 【android bluetooth 协议分析 15】【SPP详解 1】【SPP 介绍】
  • ThinkPHP 5.1 中的 error 和 success 方法详解
  • 【LangchainAgent】Agent基本构建与使用
  • 基于Spring Boot的云音乐平台设计与实现
  • Vue3 项目的基本架构解读
  • K8S认证|CKS题库+答案| 6. 创建 Secret
  • Gartner《How to Create and Maintain a Knowledge Base forHumans and AI》学习报告