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;
}
相关推荐
晨非辰19 小时前
数据结构排序系列指南:从O(n²)到O(n),计数排序如何实现线性时间复杂度
运维·数据结构·c++·人工智能·后端·深度学习·排序算法
j***12151 天前
Spring Boot中Tomcat配置
spring boot·tomcat·firefox
z***67771 天前
SpringBoot(整合MyBatis + MyBatis-Plus + MyBatisX插件使用)
spring boot·tomcat·mybatis
Filotimo_1 天前
Spring Boot 整合 JdbcTemplate(持久层)
java·spring boot·后端
半桶水专家1 天前
Go 语言时间处理(time 包)详解
开发语言·后端·golang
编程点滴1 天前
Go 重试机制终极指南:基于 go-retry 打造可靠容错系统
开发语言·后端·golang
椒盐螺丝钉1 天前
Vue Router应用:组件跳转
前端·javascript·vue.js
码事漫谈1 天前
AI编程规模化实践:从1到100的工程化之道
后端
码事漫谈1 天前
AI编程:更适合0到1的创意爆发,还是1到100的精雕细琢?
后端
码事漫谈1 天前
Python与C#:从哲学到细节的全面对比
后端