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;
}
相关推荐
子兮曰1 天前
jev-ultrafast 深度解析:7 秒订机票的浏览器 Agent 是如何炼成的
前端·后端·agent
子兮曰1 天前
Jev 爆发一周:7 秒 Agent 背后的 System One 生态与三场争议
前端·后端·ai编程
爱勇宝1 天前
ZCode 开源 24 小时:一份没有历史的账本,回答不了"有没有偷代码"
前端·后端·chatglm (智谱)
A黄俊辉A1 天前
uniapp webview中实现 app和内嵌的H5双向通信
vue.js·json
胡写代码1 天前
别再前后端各写一套表单校验了
java·后端
大勇前进1 天前
原生 PHP 还是 Laravel?小项目到底要不要上框架
后端
vipxieliang1 天前
ValidX 在 DDD 领域驱动设计中的实践
java·spring boot
yuzhi_liu1 天前
我用 LangGraph4j 实现 Multi-Agent Supervisor
后端
alsmile1 天前
Node-RED 之外,国产规则引擎的新方案:基于标准语法,Go 先行实现
后端·开源·go
大白801 天前
PHP 内存溢出排查思路:看懂报错日志,精准定位问题
后端