spring boot 后端实现导出对应字段表格
后端代码,是通过文件流的形式进行导出,需要前端转换处理即可导出到当前浏览器
SXSSFWorkbook sxssfWorkbook = new SXSSFWorkbook(50);//设置堆内存最大数量
//表头数组
String[] lables = new String[]{"表头字段1", "表头字段2"};
Sheet sheet = sxssfWorkbook.createSheet("充电统计");
// 冻结第一行
sheet.createFreezePane(0, 1);
// 创建第一行,作为header表头
Row header = sheet.createRow(0);
// 循环创建header单元格
for (int cellnum = 0; cellnum < lables.length; cellnum++) {
Cell cell = header.createCell(cellnum);
cell.setCellValue(lables[cellnum]);
//设置每列固定宽度
sheet.setColumnWidth(cellnum, 14 * 256);
}
List list = "";//自己需要导出的列表 一般为数据库查询出来的值
int countSize = 1;
//遍历集合谁知每行的字段值
for(User user:list){
Row row = sheet.createRow(countSize);
row.createCell(0).setCellValue("设置需要导出的字段值");
if (countSize % 50 == 0) {//每当行数达到设置的值就刷新数据到硬盘,以清理内存
((SXSSFSheet) sheet).flushRows();//关键就在这
}
countSize++;
}
ServletOutputStream out = null;
ServletOutputStream out = null;
try {
out = response.getOutputStream();
response.setContentType("application/vnd.openxmlformats-officedocument.spreadsheetml.sheet");
response.setHeader("Content-disposition", String.format("attachment; filename=%s", "文件名.xlsx"));
if (null != out) {
sxssfWorkbook.write(out);
out.flush();
}
} catch (IOException var11) {
var11.printStackTrace();
} finally {
if (null != out) {
try {
out.close();
} catch (IOException var10) {
var10.printStackTrace();
}
}
}
} catch (IOException e) {
e.printStackTrace();
}