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();
        }
    }
}
相关推荐
SunnyDays10116 小时前
Python操作Excel批注:从基础添加到高级自定义的完整指南
开发语言·python·excel
Eiceblue9 小时前
Python 操作 Excel:数据分组、分类汇总与取消分组全解
开发语言·python·excel
城数派10 小时前
2026年500米分辨率DEM地形数据(全球/全国/分省/分市)
数据库·arcgis·信息可视化·数据分析·excel
SunnyDays101110 小时前
Python 操作 Excel 超链接:添加网页、文件、工作表和图片链接
python·excel
penngo12 小时前
FlowLoom:基于 Apache Spark 的可视化数据处理平台
大数据·spark·apache
专注VB编程开发20年13 小时前
我制作excel工作簿的选项卡,发给deep seek, 昨天修改了一天
前端·vue.js·excel
星越华夏1 天前
python办公自动化,csv文件/excel文件差集合并
开发语言·python·excel
开开心心就好1 天前
180套模板的图片艺术拼接实用工具
linux·服务器·网络·spring·智能手机·maven·excel
Apache RocketMQ1 天前
全新 AI 消息模型:Apache RocketMQ 如何让 AI 应用拥抱事件驱动架构?
人工智能·apache·rocketmq
MageGojo2 天前
给起名工具接入八字起名 API:参数设计、JSON 示例和应用场景
json·apache