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();
        }
    }
}
相关推荐
Data-Miner20 小时前
离线AI制表:模型适配与脚本固化实操
大数据·数据库·人工智能·excel
天蓝蓝的本我20 小时前
linux本地部署Qwen3.8 27B
linux·运维·excel
扶风ff21 小时前
练题簿在线免费刷题:题目导入、章节管理、Excel 与 Word 导出,让题库更好用
学习·小程序·word·excel
开开心心就好2 天前
视频压缩工具推荐,绿色版免安装双击即用
java·前端·人工智能·spring·智能手机·intellij-idea·excel
泡海椒2 天前
JQuick-Excel 导入反向映射实战:让中文表头稳定落到业务字段
开发语言·python·excel
Data-Miner2 天前
本地化Excel智能工具怎么选?
excel
格数致用2 天前
02- Excel文件导入导出技术实现详解:从原理到实战
excel·luckyexcel·报表处理
程序员清风3 天前
CSV、Excel 与数据库数据读取实践
数据库·oracle·excel
泡海椒3 天前
JQuick-Excel JContext 与 trans 实战:将字典值带入行转换
excel
泡海椒4 天前
JQuick-Excel dateFormat 转换实战:日期值与 FORMAT 显示格式的边界
开发语言·python·excel