反馈已提交

网络繁忙

多个报表导出一个Excel

  • 文档创建者:lu123
  • 编辑次数:18次
  • 最近更新:RosieY 于 2022-01-14
  • 1. 概述

    1.1 应用场景

    在报表统计分析中,常常希望将某类报表或者不同参数的同一报表汇总导出到一个 Excel 中,每张报表对应一个 sheet。如下图所示,地区销售量统计报表,导出后,将每个地区的数据单独作为一个 sheet 汇总于一个 Excel 中。如下图所示:

    image.png

    1.2 实现原理

    实现将某类报表或者不同参数的同一报表汇总导出到一个 Excel 中,可以通过Java 程序调用帆软导出 API 实现。将报表模板读入 Java 程序,给模板中参数赋值,将不同参数值对应的报表内容在工作簿排放好,对应 Excel 的不同Sheet ,最后导出Excel。

    1)读入模板:

    // 未执行模板工作薄
    TemplateWorkBook workbook = TemplateWorkBookIO.readTemplateWorkBook(
    "Gettingstarted.cpt");

    2)以第一个执行后的结果工作薄 workbook 作为容器,添加其他地区的统计报表,因此先将 workbook 中的第一个 sheet 重命名为华东,表示华东地区的数据。

    // 参数值为China计算结果,将结果保存至rworkbook
    Parameter[] parameters = workbook.getParameters();
    java.util.Map parameterMap = new java.util.HashMap();
    for (int i = 0; i < parameters.length; i++) {
    parameterMap.put(parameters[i].getName(), "华东");
    }
    PageWorkBook rworkbook = (PageWorkBook)workbook.execute(parameterMap,new PageActor());    
    rworkbook.setReportName(0, "华东");

    3)改变参数值后,将华北地区的执行结果加入工作簿。

    rworkbook.setReportName(0, "华东");
    改变参数值为华北,执行获得结果报表 PageReport,加入结果工作薄
    // 清空parametermap,将参数值改为华北,计算后获得ResultReport
    parameterMap.clear();
    for (int i = 0; i < parameters.length; i++) {
    parameterMap.put(parameters[i].getName(), "华北");
    }
    PageWorkBook rworkbook2 = (PageWorkBook)workbook.execute(parameterMap,new PageActor());
    PageReport rreport2 = rworkbook2.getPageReport(0);
    rworkbook.addReport("华北", rreport2);

    4)导出工作薄

    // 定义输出流
    FileOutputStream outputStream;
    // 将结果工作薄导出为Excel文件
    outputStream = new FileOutputStream(new File("E:\\ExcelExport.xls"));PageExcelExporter excelExport = new PageExcelExporter(ReportUtils.getPaperSettingListFromWorkBook(workbook));  
    ExcelExport.export(outputStream, workbook.execute(parameterMap));

    2. 示例

    下面实现后台导出 GettingStarted.cpt 模板,导出后华东、华北地区的数据分 sheet 展示。

    2.1 准备编译环境

    编译程序前,需先创建一个 Java 工程环境,并且需要一个 Java 编辑器,如 Eclipse 或 idea 。

    在编辑器工程中引入 FineReport 工程 JAR 包。包括安装的报表工程

    • %FR_HOME%\webapps\webroot\WEB-INF\lib目录下 fine 开头的 12 个 JAR 包。

    • %FR_HOME%\webapps\webroot\WEB-INF\lib目录下的 sqlite-jdbc.jar

    • %Tomcat_HOME%\libTomcat目录下的 servlet-api.jar

    • %JAVA_HOME%\jdk\lib JDK 目录下的 tools.jar

    • slf4j-simple-1.7.25.jar ,点击可下载:slf4j-simple-1.7.25.jar

    • 如果报表中需要查询数据库,还需要导入对应的 jdbc 驱动或者插件的 JAR 包(如使用 JSON 数据集,就要引入 JSON 数据集插件下的 JAR 包)。

    详细引入过程可参考:编译Java程序 

    2.2 编写 Java 程序

    在编辑器中编写 Java 程序 ExportReports.java,即引入必要类后,获取模板,将模板导出成两个 Sheet 的 Excel。完整代码可参见:

    注:用户使用时,注意将示例代码中的工程路径、模板名称和导出路径替换为用户自己工程下的。

    https://code.fanruan.com/demo/example/src/release/10.0/src/main/java/com/fr/io/ExportReports.java

    2.3 编译 Java 文件

    Java 程序编写完成后,在编译器中编译 ExportReports.java ,编译通过后,就会在代码中导出路径的文件夹生成ExcelExport1.xls文件,这样就导出成功了。如下图所示:

    image.png

    打开该文件,便可以看到,不同地区的数据已经分别作为一个 sheet 保存至一个 Excel 中了。如下图所示:
    image.png

    附件列表


    主题: 二次开发
    • 有帮助
    • 没帮助
    • 只是浏览

    售前咨询电话

    400-811-8890转1

    在线技术支持

    在线QQ:800049425

    热线电话:400-811-8890转2

    总裁办24H投诉

    热线电话:173-1278-1526

    文 档反 馈

    鼠标选中内容,快速反馈问题

    鼠标选中存在疑惑的内容,即可快速反馈问题,我们将会跟进处理。

    不再提示

    10s后关闭