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();
        }
    }
}
相关推荐
VBAMatrix4 小时前
deepseek-v4正式接入Excel,一键生成财务分析报告
word·excel·审计·财务分析·deepseek·会计师事务所·tb工具箱
渣渣盟5 小时前
Apache Flink物理分区算子全解析
大数据·flink·apache
Shadow(⊙o⊙)12 小时前
linux基础指令2.0
linux·运维·服务器·学习·apache
专注VB编程开发20年1 天前
傻瓜式Office 功能区插件 / Ribbon开发模板
ribbon·excel·vba·插件·扩展宏
专注VB编程开发20年2 天前
Excel 2024 / 365 已经把 “单元格填充效果→图片” 这个按钮删掉了
excel
开开心心就好2 天前
仅168KB的桌面图标自动隐藏工具
windows·计算机视觉·计算机外设·excel·启发式算法·宽度优先·csdn开发云
蒋胜山2 天前
Excel 练习题(7)
经验分享·excel
蒋胜山2 天前
Excel 练习题(6)
经验分享·excel
wcy_10113 天前
QCoder智能生成Excel数据清洗与可视化代码
python·excel
运维全栈笔记3 天前
Linux安装配置Tomcat保姆级教程:从部署到性能调优
linux·服务器·中间件·tomcat·apache·web