springboot+vue使用easyExcel实现导出功能

vue部分

javascript 复制代码
// 导出计算数据
      exportDataHandle(id) {
        this.$http({
          url: this.$http.adornUrl('/xxx/xxx/exportCalDataExcel'),
          method: 'post',
          data: this.$http.adornData({'id': id}),
          responseType: 'blob', // 重要:告诉axios我们希望接收二进制数据
        }).then(({data}) => {
          const blob = new Blob([data], {type: 'data:application/vnd.ms-excel;base64;charset=utf-8'});
          const downloadElement = document.createElement('a');
          const href = window.URL.createObjectURL(blob); // 创建下载的链接
          downloadElement.href = href;
          downloadElement.download = 'abc' + '.xlsx'; // 下载后文件名
          document.body.appendChild(downloadElement);
          downloadElement.click(); // 点击下载
          document.body.removeChild(downloadElement); // 下载完成移除元素
          window.URL.revokeObjectURL(href); // 释放掉blob对象

          this.$message({
            message: '操作成功',
            type: 'success',
            duration: 1500,
          })
        })
      },

Java部分

1导入maven依赖

这里要注意,由于easyexcel的包中包含了poi的依赖,所以在引入easyexcel包之前,需要删掉mavne中poi的包,否则会出现依赖异常:com.alibaba.excel.exception.ExcelGenerateException: java.lang.NoSuchFieldError: Factory

javascript 复制代码
        <dependency>
			<groupId>com.alibaba</groupId>
			<artifactId>easyexcel</artifactId>
			<version>3.0.5</version>
		</dependency>
		<dependency>
			<groupId>com.alibaba</groupId>
			<artifactId>fastjson</artifactId>
			<version>1.2.79</version>
		</dependency>
		<dependency>
			<groupId>cn.hutool</groupId>
			<artifactId>hutool-all</artifactId>
			<version>5.8.10</version>
		</dependency>

2 编写代码

java 复制代码
import com.alibaba.excel.EasyExcel;   
 /**
     * 导出 计算数据
     */
    @RequestMapping("/exportCalDataExcel")
    public void exportCalDataExcel(@RequestBody ExamEntity exam, HttpServletResponse response) throws IOException {
        //1 数据获取
        List<CalDataDto> dataList = answerScoreService.getAllCalData(exam);

        //2 设置响应头
        response.setContentType("application/vnd.ms-excel");
        response.setCharacterEncoding("utf-8");
        // 这里URLEncoder.encode可以防止中文乱码
        String fileName = URLEncoder.encode("文件名", "UTF-8").replaceAll("\\+", "%20");
        response.setHeader("Content-disposition", "attachment;filename*=utf-8''" + fileName + ".xlsx");

        // 3 将数据写入excel中
        EasyExcel.write(response.getOutputStream(), CalDataDto.class)
                .sheet("Sheet1")
                .doWrite(dataList);
    }
java 复制代码
import com.alibaba.excel.annotation.ExcelProperty;
import lombok.Data;

@Data
public class CalDataDto {
    @ExcelProperty("变量名")
//    @ColumnWidth(10)
    private String name;

    @ExcelProperty("数据")
    private Double num;
}
相关推荐
冰_河41 分钟前
QPS从300到3100:我靠一行代码让接口性能暴涨10倍,系统性能原地起飞!!
java·后端·性能优化
JavaGuide3 小时前
7 道 RAG 基础概念知识点/面试题总结
前端·后端
桦说编程3 小时前
从 ForkJoinPool 的 Compensate 看并发框架的线程补偿思想
java·后端·源码阅读
格砸4 小时前
从入门到辞职|从ChatGPT到OpenClaw,跟上智能时代的进化
前端·人工智能·后端
蝎子莱莱爱打怪5 小时前
GitLab CI/CD + Docker Registry + K8s 部署完整实战指南
后端·docker·kubernetes
哈密瓜的眉毛美5 小时前
零基础学Java|第三篇:DOS 命令、转义字符、注释与代码规范
后端
前端Hardy6 小时前
干掉 Virtual DOM?尤雨溪开始"强推" Vapor Mode?
vue.js·vue-router
用户60572374873086 小时前
AI 编码助手的规范驱动开发 - OpenSpec 初探
前端·后端·程序员