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;
}
相关推荐
种子q_q几秒前
Redis的三种典型的 “缓存失效” 问题
后端·面试
金銀銅鐵几秒前
[Java] 观察 CompactStrings 选项的影响
java·后端
程序猿二饭1 分钟前
Spring Boot 项目启动报错:MongoSocketOpenException 连接被拒绝排查日记
后端
UP2 分钟前
【C++基础】内存管理——malloc/free和new/delete之间的盘根错节
后端
paopaokaka_luck5 分钟前
绿色环保活动平台(AI问答、WebSocket即时通讯、协同过滤算法、Echarts图形化分析)
java·网络·vue.js·spring boot·websocket·网络协议·架构
齐穗穗5 分钟前
springboot集成websocket
spring boot·后端·websocket
玉衡子8 分钟前
四、索引优化实战
java·后端
程序员爱钓鱼41 分钟前
Go语言实战案例 — 工具开发篇:编写一个进程监控工具
后端·google·go
老华带你飞1 小时前
畅阅读小程序|畅阅读系统|基于java的畅阅读系统小程序设计与实现(源码+数据库+文档)
java·数据库·vue.js·spring boot·小程序·毕设·畅阅读系统小程序
canonical_entropy2 小时前
不同的工作需要不同人格的AI大模型?
人工智能·后端·ai编程