需求:从数据库查出一个List,将list导入到excel中。
这种问题太常见了网上这种一找一大堆,但是每次找的都不一定能完全能成功。因此把这次的记录下来。
这里只记录核心的service部分,用的是apache的poi工具:
public ResponseEntity<> exportExcel(List<Object> dataList,List<String> keyList){
JSONArray dataArray=JSONArray.parseArray(JSON.toJSONString(datalist,SerializerFeature.WriteMapNullValue))
Workbook work=new XSSFWorkbook();
Sheet sheet=workbook,createSheet(String.valueof(System.currentTimeMillis()));
Row row;
row=sheet.createRow((short)0);
for(int i=0;i<keyList.size;i++){//这里的第一行把字段名放进去
cell=row.createCell(i)
cell.setCellValue(keyList.get(i));//这里的keyList为字段注释
}
for(int i=1;i<dataArray.size()+1;i++){//dataArray为数据,从第二行开始装数据
row=sheet.createRow((short)i);
for(int j=0;j<keyList.size;j++){
cell=row.createCell(j);
cell.setCellValue(dataArray.getJSONObject(i-1).getString(keyList.get(j)));}
}
ByteArrayOutputStream baos=new ByteArrayOutputStream();
workbook.write(baos);
workbook.close();
HttpHeaders headers=new HttpHeaders();
headers.add(HttpHeaders.CONTENT_DISPOSITION,"attachment;filename="+System.currentTimeMills()+".xlsx");
headers.add(HttpHeaders.CONTENT_TYPE,"application/vnd.ms-excel;charset=utf-8");
return new ResponseEntity<>(baos.toByteArray(),headers,HttpStatus.CREATED);
}