第1章 需求描述

需求如下:通过浏览器输入URL实现批量导出报表,可设置为将多个报表导入到一个文件中(不支持多端报表),也可以设置为导出多个文件打包为一个压缩文件。

第2章 参数描述

批量导出文件调用的还是原有的action,只是参数不同,共有5个参数:

  • batch:参数batch决定是否批量导出;
  • singleFile:参数singleFile决定是导出多个报表到一个文件中还是每个报表导出一个文件再打包压缩;
  • autoSheetName:参数autoSheetName决定在单文件模式导出excel文件时是否自动对sheet页命名;
  • encode:可以将reports参数使用base64编码后传入,此时encode参数需要设置为true;
  • reports:参数reports是一个json数组,里面有每个需要导出的报表id和每张表的参数。reports数组格式如下:
reports=
[
{"reportId":"第1个报表ID","params":{"第1个参数":"值",…, "第n个参数":"值"}},
            …
{"reportId":"第n个报表ID ","params":{"第1个参数":"值",…, "第n个参数":"值"}}
]

第3章 如何批量导出文件

需要批量导出文件时,我们提供了一个页面来实现批量导出功能。

首先需要修改以下页面:

unieap/pages/sample/jsp/demo/TestReportFunction.jsp

修改其中的exampleExport函数(修改方法在后面章节展开),最后在页面中打开 http://localhost:8080/report/unieap/pages/sample/jsp/demo/TestReportFunction.jsp(将前面部分换成自己环境所在地址)

1

如图所示,如果需要批量导出Excel,就点击导出Excel按钮,依次类推,Excel、PDF、Word和csv格式都可以批量导出,下面根据不同的例子来详细介绍参数如何修改。

3.1 批量导出Excel文件

导出Excel时,如果设置为将多个报表导出到一个文件中,会得到一个excel文件,每个报表会以sheet页的形式导出到文件中。如果设置为多文件方式导出,会得到一个压缩包,压缩包里会有若干excel文件,每个文件对应一个报表。

1)单文件方式导出。此时需要设置参数singleFile=true,多个sheet页导入到一个文件中时,如果报表的sheet页没有命名,最后导出的文件中sheet页的名称就会很混乱(可能是sheet1、sheet_1_1…之类的命名),如果设置参数autoSheetName=true,在导出时会自动设置sheet页的名称为“报表名_sheet页名”,如果设置值为false或者默认情况下,sheet页的名称会保留用户设置的名称或者默认sheet页名称。图2-1是默认情况和设置sheet页名称自动生成的对比,可以看到如果设置sheet页名称自动生成的话,如第三第四张表名为多布局报表(报表名)发货单(sheet页名)。如果默认sheet页名称为空,如sheet_1,默认方式就会造成混淆,不够直观。

2

2)如果设置singleFile参数为false或不设置的情况下,会输出所有Excel文件打包的压缩文件。

3)导出实例:

function exampleExport(type){
    var param={};

    param.batch="true";//设置为批量导出
    param.singleFile="true";//如果是excel,设置为单文件多sheet页导出,而不是多个excel文件导出
    param.autoSheetName="true";//excel导出设置为将sheet页命名为报表名称,而不是sheet1、sheet2

    var reports=[];

    var report1={};//储存第一个报表相关信息
    report1.reportId="6827e7c0-425d-40bf-bc37-1e29efdec83a";//第一个报表的报表id
    report1.params={//第一个报表的参数
        'sdate':'2008-08'
    };
    reports.push(report1);

    var report2={};//储存第二个报表相关信息
    report2.reportId="d3ed5a14-1a29-4c57-b24e-6eced4ddb5a0";//第二个报表的报表id
    reports.push(report2);

    param.reports=JSON.stringify(reports);

    reportExport(param,type,false);
}

以上实例中,batch=true代表使用批量导出,singleFile=true代表使用单文件方式导出,如果需要多文件就将其设为false或者不写,autoSheetName=true代表自动为sheet页命名,如果不需要可以设为false或者不写,最后是需要导出的报表id和参数,第二个报表没有参数,可以直接省略参数项。之后在页面中点击导出Excel即可。

3.2 批量导出Word文件

1)单文件方式导出:Word文件的导出由于内存问题,单个Word文件的大小不能超过100页,所以如果设置为单文件方式导出,当报表内容较少且个数不多时(100页以内),可以将所有报表导出为一个Word文件,但当需要导出的报表的总页数超过100页时,就会将需要导出的报表顺次导出到多个Word文件中,然后将这些文件压缩,且每个Word文件只有100页,例如需要导出的报表分别是3页、100页、100页时,导出的第一个文件有100页,其中含第一个报表的3页和第二个报表的前97页,第二个文件有100页,含有第二个报表剩下的3页和第三个报表的前97页,第三个文件是第三个报表剩下的3页。

2)多文件方式导出:如果设置为多文件方式导出,会得到一个压缩包,压缩包里会有若干Word文件,每个文件对应一个报表。

3)导出实例:

function exampleExport(type){
    var param={};

    param.batch="true";//设置为批量导出
    param.singleFile="true";//设置为单文件导出,而不是多个文件压缩后导出
    var reports=[];

    var report1={};//储存第一个报表相关信息
    report1.reportId="6827e7c0-425d-40bf-bc37-1e29efdec83a";//第一个报表的报表id
    report1.params={//第一个报表的参数
        'sdate':'2008-08'
    };
    reports.push(report1);

    var report2={};//储存第二个报表相关信息
    report2.reportId="d3ed5a14-1a29-4c57-b24e-6eced4ddb5a0";//第二个报表的报表id
    reports.push(report2);

    param.reports=JSON.stringify(reports);

    reportExport(param,type,false);
}

以上实例中,batch=true代表使用批量导出,singleFile=true代表使用单文件方式导出,如果需要多文件就将其设为false或者不写,最后是需要导出的报表id和参数。这个实例和导出Excel没什么太大区别,只是没有Excel的多sheet页模式而已,然后在页面点击导出Word即可。

3.3 批量导出Pdf文件

1)单文件方式导出: 如果选择单文件方式导出,当总页数少于100页时会导出一个Pdf文件,总页数大于100时会把报表顺次导出到多个Pdf文件并将其压缩。

2)多文件方式导出:如果选择多文件方式导出会导出所有的报表并压缩。

3)导出实例:

function exampleExport(type){
    var param={};

    param.batch="true";//设置为批量导出
    param.singleFile="true";//设置为单文件导出,而不是多个文件压缩后导出
    var reports=[];

    var report1={};//储存第一个报表相关信息
    report1.reportId="6827e7c0-425d-40bf-bc37-1e29efdec83a";//第一个报表的报表id
    report1.params={//第一个报表的参数
        'sdate':'2008-08'
    };
    reports.push(report1);

    var report2={};//储存第二个报表相关信息
    report2.reportId="d3ed5a14-1a29-4c57-b24e-6eced4ddb5a0";//第二个报表的报表id
    reports.push(report2);

    param.reports=JSON.stringify(reports);

    reportExport(param,type,false);
}

以上实例中,batch=true代表使用批量导出,singleFile=true代表使用单文件方式导出,如果需要多文件就将其设为false或者不写,最后是需要导出的报表id和参数。和导出word相同,最后点击导出PDf即可。

3.4 批量导出Csv文件

1)单文件方式导出:如果选择单文件方式导出,就会把所有报表导出到一个csv文件中。

2)多文件方式导出:如果选择多文件方式导出,就会将每个报表导出为一个csv文件并压缩。

3)导出实例:

function exampleExport(type){
    var param={};

    param.batch="true";//设置为批量导出
    param.singleFile="true";//设置为单文件导出,而不是多个文件压缩后导出
    var reports=[];

    var report1={};//储存第一个报表相关信息
    report1.reportId="6827e7c0-425d-40bf-bc37-1e29efdec83a";//第一个报表的报表id
    report1.params={//第一个报表的参数
        'sdate':'2008-08'
    };
    reports.push(report1);

    var report2={};//储存第二个报表相关信息
    report2.reportId="d3ed5a14-1a29-4c57-b24e-6eced4ddb5a0";//第二个报表的报表id
    reports.push(report2);

    param.reports=JSON.stringify(reports);

    reportExport(param,type,false);
}

以上实例中,batch=true代表使用批量导出,singleFile=true代表使用单文件方式导出,如果需要多文件就将其设为false或者不写,最后是需要导出的报表id和参数。最后点击导出csv即可。

results matching ""

    No results matching ""

    results matching ""

      No results matching ""