Apache POI介绍
Apache POI 是一个处理Miscrosoft Office各种文件格式的开源项目。简单来说就是,我们可以使用 POI 在 Java 程序中对Miscrosoft Office各种文件进行读写操作。一般情况下,POI 都是用于操作 Excel 文件。
应用场景:银行网银系统导出交易明细、各种业务系统导出excel报表、批量导入业务数据等。
实现步骤
- 构造excel表格数据。
- 创建工作薄,工作薄可以根据输入流进行创建指定模板的工作薄,也可以创建空的工作薄。
- XSSFWorkbook excel = new XSSFWorkbook(inputStream); 根据指定输入流创建工作薄。
- XSSFWorkbook excel = new XSSFWorkbook(); 创建一个空的工作薄。
- 根据创建的工作薄对象创建sheet页;如果创建指定模板的工作薄,此处为获取sheet页。
- XSSSheet = excel.creatSheet("name"); 创建名为name的sheet页。
- XSSSheet = excel.getSheetAt(0); 获取第一页。
- 创建行对象、获取行对象。
- XSSFRow row1 = sheet.createRow(0); 创建第一行。
- XSSFRow row1 = sheet.get(0); 获取行对象。
- 创建单元格对象、获取单元格对象。
- row2.createCell(1).setCellValue("张三");
- row2.getCell(1).setCellValue("张三");
- 填充数据。
- 通过输出流发送excel文件给客户端。
代码编写
java
/**
* 导出报表数据
* @param response
*/
@Override
public void exportBusinessData(HttpServletResponse response) {
// 查找最近一个月的数据
LocalDate endDate = LocalDate.now().minusDays(1);
LocalDate beginDate = LocalDate.now().minusDays(30);
// 查找相应数据
BusinessDataVO businessData = workspaceService.getBusinessData(LocalDateTime.of(beginDate, LocalTime.MIN), LocalDateTime.of(endDate, LocalTime.MAX));
// 获取输入流
InputStream inputStream = this.getClass().getClassLoader().getResourceAsStream("template/运营数据报表模板.xlsx");
try {
// 创建excel模板对象
XSSFWorkbook excel = new XSSFWorkbook(inputStream);
// 获取sheet页
XSSFSheet sheet = excel.getSheetAt(0);
// 写入获取数据时间
sheet.getRow(1).getCell(1).setCellValue("运营时间:" + beginDate + "至" + endDate);
// 获取第四行
XSSFRow row = sheet.getRow(3);
row.getCell(2).setCellValue(businessData.getTurnover());
row.getCell(4).setCellValue(businessData.getOrderCompletionRate());
row.getCell(6).setCellValue(businessData.getNewUsers());
row = sheet.getRow(4);
row.getCell(2).setCellValue(businessData.getValidOrderCount());
row.getCell(4).setCellValue(businessData.getUnitPrice());
// 完成每日报单填写
for (int i = 0; i < 30; i++) {
LocalDateTime beginTime = LocalDateTime.of(beginDate, LocalTime.MIN);
LocalDateTime endTime = LocalDateTime.of(beginDate, LocalTime.MAX);
// 查找每日对应数据
businessData = workspaceService.getBusinessData(beginTime, endTime);
// 填充excel表格
sheet.getRow(7 + i).getCell(1).setCellValue(String.valueOf(beginDate));
sheet.getRow(7 + i).getCell(2).setCellValue(businessData.getTurnover());
sheet.getRow(7 + i).getCell(3).setCellValue(businessData.getValidOrderCount());
sheet.getRow(7 + i).getCell(4).setCellValue(businessData.getOrderCompletionRate());
sheet.getRow(7 + i).getCell(5).setCellValue(businessData.getUnitPrice());
sheet.getRow(7 + i).getCell(6).setCellValue(businessData.getNewUsers());
beginDate = beginDate.plusDays(1);
}
// 获取输出流
ServletOutputStream outputStream = response.getOutputStream();
excel.write(outputStream);
// 关闭资源
inputStream.close();
outputStream.close();
excel.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}