安装依赖
<!-- hutool工具类 -->
<dependency>
<groupId>cn.hutool</groupId>
<artifactId>hutool-all</artifactId>
<version>5.8.25</version>
</dependency>
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi-ooxml</artifactId>
<version>5.2.3</version>
</dependency>
vue3前端实现方式
<el-table :data="data.tableData" stripe @selection-change="handleSelectionChange">
<el-table-column type="selection" width="55" align="center"></el-table-column>
</el-table>
selection-change:传递已经选中数据的id
js实现
//获取选中的行数
const handleSelectionChange = (selection) => {
data.selectedRows = selection
//console.log(data.selectedRows)
}
//导出
const export_data = () => {
if(data.selectedRows.length === 0){
ElMessage.error('请先选择要导出的数据。')
}
const idsToDelete = data.selectedRows.map(row => row.id)
let idsStr = idsToDelete.join(',')
window.open(import.meta.env.VITE_BASE_URL+'/teacher/exports?idsStr='+idsStr)
}
import.meta.env.VITE_BASE_URL:获取文件.env.development(本地)/.env.production(生产)设置的url(VITE_BASE_URL='http://localhost:9090')
java实现
@GetMapping("/exports")
public void exportData(@RequestParam String idsStr, HttpServletResponse response){
ExcelWriter excelWriter = ExcelUtil.getWriter(true);
List<TeacherVo> list = new ArrayList<>();
// 将 idsStr 转换为数组
String[] idsArray = idsStr.split(",");
List<Integer> idsList = Arrays.stream(idsArray)
.map(Integer::parseInt) // 将字符串转换为 Integer 类型
.collect(Collectors.toList());
//选择的数据查询教师信息
list = teacherService.selectByIds(idsList);
try {
response.setContentType("application/vnd.openxmlformats-officedocument.spreadsheetml.sheet;charset=utf-8");
response.setHeader("Content-Disposition", "attachment;filename=" + URLEncoder.encode("教师信息表", "UTF-8") + ".xlsx");
excelWriter.write(list, true);
ServletOutputStream outputStream = response.getOutputStream();
excelWriter.flush(outputStream, true);//刷新数据流
outputStream.flush();
outputStream.close();
excelWriter.close();
}catch (Exception e){
throw new CustomException("导出失败:"+e);
}
}