28.easyExcel导出Excel数据

飞一样的编程
飞一样的编程
擅长邻域:Java,MySQL,Linux,nginx,springboot,mongodb,微信小程序,vue

分类: springboot vue 专栏: 【带小白做项目】SpringBoot+Vue后台管理系统 标签: easyExcel springboot vue

2025-08-29 15:51:59 186浏览

easyExcel导出Excel数据

效果图

后端

官网:https://easyexcel.opensource.alibaba.com/

直接导出到响应体,而不是生成一个文件到服务器上(时间久了文件存储多了还得写定时任务清理,所以推荐服务器上直接不保留文件,直接响应给用户就行了)

import com.alibaba.excel.annotation.ExcelProperty;
import lombok.Data;

@Data
public class DemoData {
    @ExcelProperty("字符串标题")
    private String string;
    
    @ExcelProperty("数字标题")
    private Integer integer;
    
    @ExcelProperty("日期标题")
    private Date date;
    /**
     * 忽略这个字段
     */
    @ExcelIgnore
    private String ignore;
}
import com.alibaba.excel.EasyExcel;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;
import javax.servlet.http.HttpServletResponse;
import java.net.URLEncoder;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;

@RestController
public class WebExportDemo {
    
    @GetMapping("/export")
    public void export(HttpServletResponse response) throws Exception {
        // 1. 准备数据
        List<DemoData> data = new ArrayList<>();
        for (int i = 0; i < 10; i++) {
            DemoData demoData = new DemoData();
            demoData.setString("字符串" + i);
            demoData.setInteger(i);
            demoData.setDate(new Date());
            data.add(demoData);
        }
        
        // 2. 设置响应头
        response.setContentType("application/vnd.openxmlformats-officedocument.spreadsheetml.sheet");
        response.setCharacterEncoding("utf-8");
        String fileName = URLEncoder.encode("测试", "UTF-8");
        response.setHeader("Content-disposition", "attachment;filename=" + fileName + ".xlsx");
        
        // 3. 写入Excel
        EasyExcel.write(response.getOutputStream(), DemoData.class).sheet("模板").doWrite(data);
    }
}

这里其实没考虑大型项目,如果数据量非常大一次性导出几万条数据的话就可能卡死,那个时候建议分批次写入 Excel。这个你自行研究吧,其实也很简单。

前端

export function exportExcel(data) {
    return request({
        url: '/dev/user/export',
        method: 'get',
        responseType: 'blob',
        params: data
    })
}

重点 responseType: 'blob',

   exportDev(){
      //调用exportExcel函数可以导出Excel
      exportExcel(this.formInline).then(res => {
        // const url = new Blob([res], {type: 'application/vnd.ms-excel;charset=utf-8'});
        const url = window.URL.createObjectURL(new Blob([res]));
        const link = document.createElement('a');
        link.href = url;
        link.setAttribute('download', '开发员信息.xlsx');
        document.body.appendChild(link);
        link.click();
        document.body.removeChild(link);
        window.URL.revokeObjectURL(url);
      })
    },

思考: 如果要导出的数据非常多的话,你怎么处理???

分批次写入 excel 文件就可以解决

好博客就要一起分享哦!分享海报

此处可发布评论

评论(0展开评论

暂无评论,快来写一下吧

展开评论

您可能感兴趣的博客

客服QQ 1913284695