Apache POI实现数据以excel文件的形式导出

Apache POI介绍

Apache POI 是一个处理Miscrosoft Office各种文件格式的开源项目。简单来说就是,我们可以使用 POI 在 Java 程序中对Miscrosoft Office各种文件进行读写操作。一般情况下,POI 都是用于操作 Excel 文件。

应用场景:银行网银系统导出交易明细、各种业务系统导出excel报表、批量导入业务数据等。

实现步骤

  1. 构造excel表格数据。
  2. 创建工作薄,工作薄可以根据输入流进行创建指定模板的工作薄,也可以创建空的工作薄。
    1. XSSFWorkbook excel = new XSSFWorkbook(inputStream); 根据指定输入流创建工作薄。
    2. XSSFWorkbook excel = new XSSFWorkbook(); 创建一个空的工作薄。
  3. 根据创建的工作薄对象创建sheet页;如果创建指定模板的工作薄,此处为获取sheet页。
    1. XSSSheet = excel.creatSheet("name"); 创建名为name的sheet页。
    2. XSSSheet = excel.getSheetAt(0); 获取第一页。
  4. 创建行对象、获取行对象。
    1. XSSFRow row1 = sheet.createRow(0); 创建第一行。
    2. XSSFRow row1 = sheet.get(0); 获取行对象。
  5. 创建单元格对象、获取单元格对象。
    1. row2.createCell(1).setCellValue("张三");
    2. row2.getCell(1).setCellValue("张三");
  6. 填充数据。
  7. 通过输出流发送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();
        }
    }
}
相关推荐
开心点幸运点12 小时前
Excel——宏教程(1)
excel
木古古1813 小时前
使用chrome 访问虚拟机Apache2 的默认页面,出现了ERR_ADDRESS_UNREACHABLE这个鸟问题
前端·chrome·apache
疯一样的码农20 小时前
Apache Maven简介
java·maven·apache
boy快快长大21 小时前
将大模型生成数据存入Excel,并用增量的方式存入Excel
java·数据库·excel
Leuanghing1 天前
使用Python生成F分布表并导出为Excel文件
开发语言·python·excel·f分布
爱编程的小生1 天前
Easyexcel(4-模板文件)
java·excel
疯一样的码农1 天前
Apache Maven 标准文件目录布局
java·maven·apache
千羽星弦1 天前
Apache和HTTPS证书的生成与安装
网络协议·https·apache
今日之风甚是温和1 天前
【Excel】拆分多个sheet,为单一表格
java·excel·sheet·vb宏
如意机反光镜裸1 天前
Excel如何批量导入图片
excel