- 引入easyexcel依赖
xml
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>easyexcel</artifactId>
<version>3.3.2</version>
</dependency>
- 编写接口
java
/**
* 批量导出
*
* @param ids
* @return
*/
@PostMapping("/export")
public void exportExcel(@RequestBody List<Long> ids, HttpServletResponse response) {
// 查询出需要批量导出的数据
List<Order> orderList = orderService.listByIds(ids);
try {
response.setContentType("application/vnd.openxmlformats-officedocument.spreadsheetml.sheet");
response.setCharacterEncoding("utf-8");
EasyExcel.write(response.getOutputStream(), Order.class)
.autoCloseStream(true).build()
.write(() -> orderList, new WriteSheet()).finish();
} catch (IOException e) {
throw new RuntimeException(e);
}
}
- 前端发起导出请求并下载
javascript
const exportExcel = async () => {
// 发送HTTP GET请求获取Excel文件流
axios({
url: url地址,
method: 'POST',
responseType: 'blob', // 重要
data: 批量导出的数据id,
headers: {
'Authorization': token // 如果需要token,添加到请求头中
}
}).then((response) => {
// 创建一个Blob对象,内容为后端返回的文件流
const blob = new Blob([response.data], {type: 'application/vnd.ms-excel'});
// 创建一个a标签,用于触发下载
const link = document.createElement('a');
link.href = URL.createObjectURL(blob);
link.download = '订单表.xlsx'; // 下载文件的名称
link.click();
// 清理资源
URL.revokeObjectURL(link.href);
}).catch((error) => {
console.error('下载失败:', error);
});
}