博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
报表开发之批量导入导出excel
阅读量:6931 次
发布时间:2019-06-27

本文共 3789 字,大约阅读时间需要 12 分钟。

hot3.png

在日常使用报表过程中,会有这样一种情况,你将Excel表分发给各个员工,员工填完后,统一整理成多个Excel,你需要将这些数据,用报表的填报功能,提交录入到数据库中,这样一来可避免到服务器机房录数据的繁琐步骤,但是无论是批量导入和还是导出Excel,这对诸多报表软件或称集成报表功能的系统来说都是不容易的。

解决Excel导入的性能问题,可以利用FineReport开发的op=excel_submit功能,来实现不预览报表即可对填报表导入Excel。

根据报表工程的使用方式不同,批量导入Excel中权限控制方式有所不同。

报表工程一般有以下两种方式:

1、使用FineReport自主开发的数据决策系统op=fs使用报表工程;

2、将报表工程集成到自己的系统中。

1.1 直接使用op=fs

用户使用数据决策系统op=fs查看报表,那么所有的权限都是通过op=fs进行认证,用户也都是添加在op=fs中。

1.2 集成FR报表工程

用户将FR报表工程集成到自己的系统中,通过自己的系统查看报表,那么FR所有的权限都是通过报表平台管理op=fr_platform进行认证,详细请查权限管理。

除了批量导入,还有批量导出。一张报表可以根据不同的条件统计出不同的数据结果,有时希望将每一种条件下的结果都保存下来如导出成Excel文件至磁盘,可以在后台调用FineReport的导出接口ExcelExporter将每种情况下的结果批量保存起来。

实现的原理是遍历读取para.txt中的每组参数值,将该参数值组合传入模板进行计算,然后将结果导出excel,循环直至最后一条参数组合。

例如:

由于我们需要对模板输入参数对应的值才能够计算得到最终的结果,因此我们需要所有可能的参数值组合,可以来源于数据库中某个表,或者某个文件。这里我们假设所需的参数值组合保存在WebReport\WEB-INF\para.txt中。如下图新建para.txt 输入图片说明

如果模板有两个参数格式如下: 输入图片说明

批量导出程序,完整代码如下:

package com.fr.io;            import java.io.BufferedReader;      import java.io.File;      import java.io.FileInputStream;      import java.io.FileOutputStream;      import java.io.InputStreamReader;      import java.io.OutputStream;      import java.util.Arrays;      import com.fr.base.FRContext;      import com.fr.general.ModuleContext;import com.fr.dav.LocalEnv;    import com.fr.io.exporter.ExcelExporter;  import com.fr.main.TemplateWorkBook;    import com.fr.main.workbook.ResultWorkBook;import com.fr.report.module.EngineModule;import com.fr.stable.StableUtils;  import com.fr.stable.WriteActor;             public class ExportBatch {           public static void main(String[] args) {               try {                   // 定义报表运行环境,用于执行报表                   String envpath = "D:\\FineReport_7.1\\WebReport\\WEB-INF";                   FRContext.setCurrentEnv(new LocalEnv(envpath));         ModuleContext.startModule(EngineModule.class.getName());        // 读取环境下的模板文件        TemplateWorkBook workbook = TemplateWorkBookIO.readTemplateWorkBook(FRContext.getCurrentEnv(),            "doc\\Primary\\DetailReport\\Details.cpt");        // 读取用于保存的参数值的txt文件        File parafile = new File(envpath + "\\para.txt");        FileInputStream fileinputstream;        fileinputstream = new FileInputStream(parafile);        BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(fileinputstream));        // 定义保存参数的map,用于执行报表        java.util.Map paramap = new java.util.HashMap();        /*       * 遍历参数值所在txt文件,txt文件中参数保存形式为 para1,para2 江苏,陈羽 江苏,安娜 首先取出第一行保存参数名称       * 遍历每个参数组合,如para1=江苏、para2=陈羽,根据参数执行模板,并将结果导出excel excel文件名为名称+导出编号       */        // 读第一行,保存参数名称        String lineText = bufferedReader.readLine();        lineText = lineText.trim();        String[] paraname = StableUtils.splitString(lineText, ",");        System.out.println(Arrays.toString(paraname));        // 遍历每个参数组合,执行模板,导出结果        int number = 0;        while ((lineText = bufferedReader.readLine()) != null) {            lineText = lineText.trim();            String[] paravalue = StableUtils.splitString(lineText, ",");            for (int j = 0; j < paravalue.length; j++) {                paramap.put(paraname[j], paravalue[j]);            }            ResultWorkBook result = workbook.execute(paramap,new WriteActor());          OutputStream outputstream = new FileOutputStream(new File("E:\\ExportEg" + number + ".xls"));            ExcelExporter excelexporter = new ExcelExporter();            excelexporter.export(outputstream, result);            // 最后要清空一下参数map,用于下次计算            paramap.clear();            number++;            outputstream.close();          }     ModuleContext.stopModules();    } catch (Exception e) {            e.printStackTrace();        }              }    }

上述为示例程序,其中报表运行环境与模板名称等需要根据您实际环境进行修改。编译运行该程序您便可以得到结果,在E盘根目录下将生成3个Excel文件,如下 输入图片说明

内容分别为 输入图片说明输入图片说明

这样批量导出便成功了。

转载于:https://my.oschina.net/jiuyuenihao/blog/727658

你可能感兴趣的文章
Spark2.1.0之内置RPC框架
查看>>
js对于小数的处理
查看>>
Jenkins - 构建Allure Report
查看>>
完美数据迁移-MongoDB Stream的应用
查看>>
http2-stream-optima-prioritation
查看>>
spring事件驱动模型--观察者模式在spring中的应用
查看>>
MySQL性能优化速记
查看>>
十问 | 关于Service Mesh 和Kubernets的最前沿思考
查看>>
你必须非常努力,才可以看起来毫不费力。
查看>>
Maven就是这么简单
查看>>
css loading
查看>>
不能ssh连接ubuntu linux 服务器 secureCRT不能ssh连接服务器 不能远程ssh连接虚拟机的ubuntu linux...
查看>>
使用Android BindingAdapter与InverseBindingAdapter实现SeekBar双向(正向/反向)数据绑定...
查看>>
Expect 安装 on centos7
查看>>
VM虚拟机的配置文件(.vmx)损坏修复
查看>>
RxJava/RxAndroid : doAfterNext
查看>>
利用graphviz模块展示斐波那契数列的递归函数调用图(Python)
查看>>
标准模板库(STL)学习指南之map映射
查看>>
CentOS7.X的系统管理、安全设置及系统优化思路
查看>>
npm全局安装和本地安装和本地开发安装(npm install --g/--save/--save-dev)
查看>>