前后端分离架构如何导出Excel表格

本文介绍使用Hutool工具类在SpringBoot架构下导出Excel的方法。通过配置依赖及编写Controller与Service层代码实现数据的获取与表格的导出。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

本文基于SpringBoot前后端分离架构,介绍如何使用Hutool提供的工具类导出Excel表格。

Hutool官网:http://hutool.cn/docs/#/poi/Excel%E5%B7%A5%E5%85%B7-ExcelUtil

准备工作

引入关键依赖。

<!-- Hutool工具包,敏捷开发的瑞士军刀 -->
<dependency>
    <groupId>cn.hutool</groupId>
    <artifactId>hutool-all</artifactId>
    <version>5.8.6</version>
</dependency>
<!-- Apache下的POI包,可以很好的支持Office2007+的文档格式 -->
<dependency>
    <groupId>org.apache.poi</groupId>
    <artifactId>poi-ooxml</artifactId>
    <version>${poi.version}</version>
</dependency>

Controller

@Api(tags = "Excel导出")
@Controller
@RequestMapping("/export")
public class ExportController {

    @Resource
    private HgOrderInfoService orderService;

    @PostMapping("/order")
    public void exportExcel(@RequestBody PageOrderRo pageOrderRo, HttpServletResponse response) throws IOException {
        orderService.exportExcel(pageOrderRo, response);
    }

}

Service

省略了部分代码,仅展示核心的关键代码。

public void exportExcel(PageOrderRo pageOrderRo, HttpServletResponse response) throws IOException {
    // 获取数据
    orderInfoVos = baseMapper.listInService(pageOrderRo);
    
    // 导出表格(true:使用xlsx格式的表格)
    ExcelWriter writer = ExcelUtil.getWriter(true);
    // 设置列的别名
    writer
        .addHeaderAlias("patientName", "服务对象")
        .addHeaderAlias("phonenum", "联系方式")
        .addHeaderAlias("departmentName", "科室")
        .addHeaderAlias("orderNo", "单据号");
	// 设置标题行
	writer.merge(4, "测试标题", true);
    // 设置单元格:仅写入别名行、冻结首行
    writer.setOnlyAlias(true).setFreezePane(1);
    // 设置日期格式
    DataFormat dataFormat = writer.getWorkbook().createDataFormat();
    writer.getStyleSet().getCellStyleForDate().setDataFormat(dataFormat.getFormat(DatePattern.NORM_DATETIME_PATTERN));
    // 写入表格
    writer.write(orderInfoVos, true);
    
    // 设置输出流
    response.setContentType("application/vnd.ms-excel;charset=utf-8");
    // filename为导出时的默认文件名(解决中文乱码问题)
    String filename = URLEncoder.encode("测试.xlsx", "UTF-8").replaceAll("\\+", "%20");
    response.setHeader("Content-Disposition", "attachment;filename*=utf-8''" + filename);
    ServletOutputStream out = response.getOutputStream();
    // 写到输出流后关闭工作簿
    writer.flush(out, true);
}
在SSM(Spring + Spring MVC + MyBatis)架构下实现Excel文件的前后端分离,通常涉及到以下几个步骤: 1. **后端处理**: - 使用Spring框架提供的`ResponseEntity`或`RestTemplate`发送HTTP响应。当用户请求导出Excel时,服务层会生成一个包含数据的`DataFrame`(使用Apache POI库如`pandas`)或其他类似的数据结构。 - 将数据转换为`ExcelWriter`(例如`XSSFWorkbook`),然后设置响应头,指定Content-Type为`application/vnd.ms-excel`或`application/octet-stream`,以下载模式返回。 ```java import org.springframework.http.ResponseEntity; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RequestParam; import org.apache.poi.ss.usermodel.Workbook; @GetMapping("/export") public ResponseEntity<byte[]> exportToExcel(@RequestParam("fileName") String fileName) { // 假设data是需要写入Excel的数据 Workbook workbook = createWorkbook(data); byte[] excelData = writeToByteArray(workbook); // 写入到字节数组 HttpHeaders headers = new HttpHeaders(); headers.setContentType(MediaType.APPLICATION_OCTET_STREAM); headers.add(HttpHeaders.CONTENT_DISPOSITION, "attachment; filename=" + fileName + ".xlsx"); return ResponseEntity.ok().headers(headers).body(excelData); } ``` 2. **前端接收并处理**: - 客户端可以是一个SPA应用,通过AJAX或Fetch API向服务器发起GET请求。当接收到响应时,前端会检测响应头是否指示为下载,并触发下载操作。 - 如果使用Vue.js等前端框架,你可以监听`response`对象的`download`事件,引导浏览器下载文件。 ```javascript axios.get('/export', { params: { fileName: 'output' } }) .then(response => { if (response.headers['content-disposition']) { window.location.href = URL.createObjectURL(response.data); } }) .catch(error => console.error('Error exporting Excel:', error)); ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

亦翼

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值