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

Vue + Spring Boot 实现 Excel 导出实例

一、前端实现

1. 导出按钮

el-tab-pane 中放置一个导出按钮:

<div style="margin-bottom: 10px;"><el-button type="primary" size="mini" @click="exportExcel">导出成品提库</el-button>
</div>

点击按钮后调用 exportExcel 方法。

2. Axios 封装接口

前端使用 Axios 请求后端导出接口,并使用 responseType: 'blob' 获取二进制流:

如下图:

3. 导出方法实现

exportExcel() {const orderNumber = this.fieldForm.orderNumber;exportModalBillHeadAPI({ orderNumber }).then(res => {// Axios 返回 data 是 Blobconst blob = res.data || res;const url = window.URL.createObjectURL(blob);const link = document.createElement('a');link.href = url;link.setAttribute('download', `成品提库-${orderNumber}.xlsx`);document.body.appendChild(link);link.click();link.remove();window.URL.revokeObjectURL(url); // 释放内存}).catch(err => {console.error('导出 Excel 错误:', err);this.$message.error('导出失败');});
}

说明:

  • responseType: 'blob':告诉 Axios 不要把响应解析为 JSON,而是原始二进制文件流。

  • window.URL.createObjectURL(blob):生成浏览器可下载的 URL。

  • link.click():模拟点击下载。

  • window.URL.revokeObjectURL(url):释放内存。

4. 表格展示与可编辑字段

前端 el-table 显示成品提库数据,并允许用户在表格中编辑销售单价:

<el-table :data="modalCostList" style="width: 100%"><el-table-column prop="orderNumber" label="项目订单" /><el-table-column prop="doCno" label="转换单号" /><el-table-column prop="itemCode" label="料号" /><el-table-column prop="itemName" label="品名" /><!-- 可编辑销售单价 --><el-table-column label="销售单价(元/KG)" prop="purchasePrice"><template slot-scope="scope"><el-inputv-model="scope.row.purchasePrice":step="0.01"size="mini"type="number"style="width: 80px;"@input="calculateInventoryBalance"/></template></el-table-column><!-- 其他计算列,如结余价值、合计金额、增值税等 --><el-table-column label="结余价值" prop="balanceValue"><template slot-scope="scope"><span>{{ (scope.row.purchasePrice * scope.row.deliveryRatio).toFixed(2) }}</span></template></el-table-column>
</el-table>

二、后端实现

使用 Spring Boot + EasyExcel 导出 Excel 文件。

1. Controller 方法

@PostMapping("/export/{orderNumber}")
@Operation(summary = "导出 SQL Server 成品提库数据(可编辑)")
public void exportModalBillHead(@PathVariable String orderNumber, HttpServletResponse response) throws Exception {// 查询数据List<ModalBillHeadVO> list = modalBillHeadService.getQueryOrderInfo(orderNumber);// 设置文件名和响应类型String fileName = (list == null || list.isEmpty()) ? "成品提库模板" : "成品提库导出";response.setContentType("application/vnd.openxmlformats-officedocument.spreadsheetml.sheet");response.setCharacterEncoding("utf-8");String encodedFileName = URLEncoder.encode(fileName, "UTF-8").replaceAll("\\+", "%20");response.setHeader("Content-disposition", "attachment;filename*=utf-8''" + encodedFileName + ".xlsx");// 使用 EasyExcel 导出EasyExcel.write(response.getOutputStream(), ModalBillHeadVO.class).sheet("成品提库").doWrite(list == null ? new ArrayList<>() : list);
}

2.说明:

  • EasyExcel.write(response.getOutputStream(), ModalBillHeadVO.class):把 List<ModalBillHeadVO> 数据直接写入 Excel。

  • 前端点击下载按钮时,浏览器会接收到 Excel 文件流。

三、为什么导出 Excel 出现 [object Object]

如下图:

出现 [object Object] 的原因主要是 Axios 默认解析响应为 JSON

  1. 后端返回的是 二进制 Excel 文件流

  2. Axios 默认把响应当作 JSON → 返回的是对象 → 传给 Blob 就是 [object Object]

  3. 解决方法:在 Axios 请求中加上 responseType: 'blob',告诉浏览器直接获取二进制流。

导出成功的效果:

四、总结

  1. 前端:导出按钮 + exportExcel() 方法 + Axios responseType: 'blob'

  2. 后端:Spring Boot + EasyExcel 输出 Excel 文件流。

  3. 表格数据:可以在浏览器表格中直接修改销售单价,导出 Excel 后用户编辑,重新导入系统进行计算。

  4. 核心原理

    • [object Object] 出现是因为 没有使用 blob

    • 使用 Blob + URL.createObjectURL 可以在浏览器端生成下载文件。

http://www.dtcms.com/a/470068.html

相关文章:

  • 服务器关闭 网站被kseo搜索引擎优化策略
  • 【Android】六大设计原则
  • 液压位置控制源代码实现与解析(C语言+MATLAB联合方案)
  • 技术拆解:基于成品源码的海外外卖跑腿平台部署指南
  • 宽城网站制作山东网站建设网站
  • 申论素材学习笔记-把握好人才工作辩证法
  • 深度学习入门(三)——优化算法与实战技巧
  • 最新短视频AI智能营销询盘获客系统源码及搭建教程 源码开源可二次开发
  • 易优cms仿站教程wordpress文章搜索排序
  • 什么网站能免费做简历wordpress汉字注册
  • 喜报!网易灵动荣获2025全球数贸创新大赛机器人赛道金奖
  • AI IDE/插件(二)
  • 一文掌控系统网络性能:Linux环境时延与带宽测试指南
  • Effective Python 第44条:用纯属性与修饰器取代旧式的 setter 与 getter 方法
  • 中国网站排名站长之家有哪些好玩的网页游戏
  • 从零开始:Godot打造2D像素冒险游戏
  • 全球十大互联网企业深圳网站设计专家乐云seo品牌
  • 如何进行后端开发:一个详细指南
  • 基于Spring Boot的酒店管理系统
  • 怎么用腾讯云服务器做网站建个人网站做导购怎么备案
  • 单页面网站设计有人做网站吗
  • 编程与数学 03-007 《看潮资源管理器》项目开发 03 技术选型
  • LeetCode每日一题,20251011
  • Linux c 在内存中创建zip,最后写入测试
  • 做品牌推广用什么网站眉山网站开发
  • 静态网站源码下载东营免费网站制作
  • 智能体架构设计
  • 2025年三个月自学手册 网络安全(黑客技术),新手小白看这一篇就够了!
  • 无锡做网站要多少钱织梦网站栏目不能更新
  • 网站设计制作公司需要什么资质西部数码网站管理助手 破解版