1.导入依赖
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi</artifactId>
<version>3.16</version>
</dependency>
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi-ooxml</artifactId>
<version>3.16</version>
</dependency>
如果自己的excel表格结构比较复杂,虽然可以通过java代码进行一步步设置,只不过有些繁琐,因此我们可以先编辑好代码的模板,接下类我们只需要读取模板向里面填充数据即可。
2.将编辑好的模板资源放在资源目录下,通过类加载器加载准备好的excel模板,并返回一个输入流
//通过POI写入到excel文件
InputStream in=this.getClass().getClassLoader().getResourceAsStream("template/运营数据报表模板.xlsx");
3.基于模板文件创建excel文件
XSSFWorkbook excel=new XSSFWorkbook(in);
4.接下来便是填充数据,每个人的模板与格式不同,自己根据自己的模板填充即可,注意excel表格的行和列都是从0开始,下面的是我所填充的数据
XSSFSheet sheet = excel.getSheet("sheet1");
sheet.getRow(1).getCell(1).setCellValue(
"时间:"+beginTime.toString()+
"至"+endTime.toString());
XSSFRow row=sheet.getRow(3);
row.getCell(2).setCellValue(businessDataVO.getTurnover());
row.getCell(4).setCellValue(businessDataVO.getOrderCompletionRate());
row.getCell(6).setCellValue(businessDataVO.getNewUsers());
row=sheet.getRow(4);
row.getCell(2).setCellValue(businessDataVO.getValidOrderCount());
row.getCell(4).setCellValue(businessDataVO.getUnitPrice());
//填充明细数据
for(int i=0;i<30;i++)
{
LocalDate date=begin.plusDays(i);
BusinessDataVO businessData
=workspaceService.getBusinessData
(LocalDateTime.of(date,LocalTime.MIN),LocalDateTime.of(date,LocalTime.MAX));
row=sheet.getRow(7+i);
row.getCell(1).setCellValue(date.toString());
row.getCell(2).setCellValue(businessDataVO.getTurnover());
row.getCell(3).setCellValue(businessDataVO.getValidOrderCount());
row.getCell(4).setCellValue(businessDataVO.getOrderCompletionRate());
row.getCell(5).setCellValue(businessDataVO.getUnitPrice());
row.getCell(6).setCellValue(businessDataVO.getNewUsers());
}
5.通过输出流将编辑好的excel文件下载到客户端
ServletOutputStream out = response.getOutputStream();
excel.write(out);
6.关闭资源
out.close();
in.close();
excel.close();