28.easyExcel导出Excel数据
分类: springboot vue 专栏: 【带小白做项目】SpringBoot+Vue后台管理系统 标签: easyExcel springboot vue
2025-08-29 15:51:59 186浏览
效果图



后端
官网: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)展开评论
展开评论

新业务
springboot学习
ssm框架课
vue学习
【带小白】java基础速成