Apache POI介绍:
Apache POl 是一个处理Miscrosoft Office各种 文件格式的开源项目。简单来说就是,我们可以使用POI 在 Java 程序中对Miscrosoft Office各种文件进行读写操作。在一般情况下,POI都是用于操作 Excel 文件。
POI使用场景:
银行网银系统导出交易明细、各种业务的导出excel报表、批量导入业务数据等
如何使用:
首先我们需要引入POI的Maven坐标
<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模板进行操作如下(这是我在苍穹外卖导出数据时使用到的方法)
/**
* @description
***:导出运营数据报表
**/
public void exportBusinessDate(HttpServletResponse response) {
//查询数据库,获取营业数据
LocalDate beginTime = LocalDate.now().minusDays(30);
LocalDate endTime = LocalDate.now().minusDays(1);
BusinessDataVO businessVO = workspaceService.getBusinessData(
LocalDateTime.of(beginTime, LocalTime.MIN),
LocalDateTime.of(endTime, LocalTime.MAX));
//写入到excel文件中
InputStream in = this.getClass().getClassLoader().getResourceAsStream("template/运营数据报表模板.xlsx");
try {
//基于模板创建一个新的excel文件
XSSFWorkbook excel = new XSSFWorkbook(in);
//填充数据 -- 概览数据
XSSFSheet sheet1 = excel.getSheet("Sheet1");
sheet1.getRow(1).getCell(1).setCellValue("时间:"+beginTime+" 至 "+endTime);//设置时间区域
XSSFRow row = sheet1.getRow(3);
row.getCell(2).setCellValue(businessVO.getTurnover());//设置营业额
row.getCell(4).setCellValue(businessVO.getOrderCompletionRate());//订单完成率
row.getCell(6).setCellValue(businessVO.getNewUsers());//新增用户数
row = sheet1.getRow(4);
row.getCell(2).setCellValue(businessVO.getValidOrderCount());//有效订单
row.getCell(4).setCellValue(businessVO.getUnitPrice());//平均客单价
//填充数据 -- 明细数据
for (int i = 0;i<30;i++){
LocalDate date = beginTime.plusDays(i);
BusinessDataVO businessData = workspaceService.getBusinessData(
LocalDateTime.of(date, LocalTime.MIN),
LocalDateTime.of(date, LocalTime.MAX));//获得当天的营业数据
row = sheet1.getRow(7+i);
row.getCell(1).setCellValue(date.toString());
row.getCell(2).setCellValue(businessData.getTurnover());
row.getCell(3).setCellValue(businessData.getValidOrderCount());
row.getCell(4).setCellValue(businessData.getOrderCompletionRate());
row.getCell(5).setCellValue(businessData.getUnitPrice());
row.getCell(6).setCellValue(businessData.getNewUsers());
}
//通过输出流下载到浏览器
ServletOutputStream ot = response.getOutputStream();
excel.write(ot);
//关闭资源
excel.close();
ot.close();
} catch (Exception e) {
e.printStackTrace();
}
}
导出数据时使用到的模板: