批量导入导出java_报表开发之批量导入导出excel

本文介绍了如何使用FineReport解决批量导入导出Excel的问题。通过op=excel_submit功能,可以高效导入填报表数据,同时详细讲解了在不同报表工程使用方式下的权限控制。批量导出则是通过遍历参数值组合,执行报表模板并导出多个Excel文件。提供了一个完整的Java示例代码,演示了如何实现批量导出。
摘要由CSDN通过智能技术生成

在日常使用报表过程中,会有这样一种情况,你将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

055b3727c3b6f560827f14b030a7d4e3.png

如果模板有两个参数格式如下:

79137f9283619e2c9054d3dd76909b59.png

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

4f1150b881333f12a311ae9ef34da474.pngpackagecom.fr.io;      

4f1150b881333f12a311ae9ef34da474.png      

4f1150b881333f12a311ae9ef34da474.pngimportjava.io.BufferedReader;      

4f1150b881333f12a311ae9ef34da474.pngimportjava.io.File;      

4f1150b881333f12a311ae9ef34da474.pngimportjava.io.FileInputStream;      

4f1150b881333f12a311ae9ef34da474.pngimportjava.io.FileOutputStream;      

4f1150b881333f12a311ae9ef34da474.pngimportjava.io.InputStreamReader;      

4f1150b881333f12a311ae9ef34da474.pngimportjava.io.OutputStream;      

4f1150b881333f12a311ae9ef34da474.pngimportjava.util.Arrays;      

4f1150b881333f12a311ae9ef34da474.pngimportcom.fr.base.FRContext;      

4f1150b881333f12a311ae9ef34da474.pngimportcom.fr.general.ModuleContext;

4f1150b881333f12a311ae9ef34da474.pngimportcom.fr.dav.LocalEnv;  

4f1150b881333f12a311ae9ef34da474.png  

4f1150b881333f12a311ae9ef34da474.pngimportcom.fr.io.exporter.ExcelExporter;  

4f1150b881333f12a311ae9ef34da474.pngimportcom.fr.main.TemplateWorkBook;    

4f1150b881333f12a311ae9ef34da474.pngimportcom.fr.main.workbook.ResultWorkBook;

4f1150b881333f12a311ae9ef34da474.pngimportcom.fr.report.module.EngineModule;

4f1150b881333f12a311ae9ef34da474.pngimportcom.fr.stable.StableUtils;  

4f1150b881333f12a311ae9ef34da474.pngimportcom.fr.stable.WriteActor;

4f1150b881333f12a311ae9ef34da474.png     

4f1150b881333f12a311ae9ef34da474.png       

1fa987a29c6482f53d401256f96355eb.png

ca75c07623e1b494fee67e8f316fc310.gifpublicclassExportBatch9b8a8a44dd1c74ae49c20a7cd451974e.png{      

97e794c86028c5f5b5461ae5ef440a4c.png

3c6cafce68eb941a00f1998f1d3d3aa6.gifpublicstaticvoidmain(String[] args)9b8a8a44dd1c74ae49c20a7cd451974e.png{      

97e794c86028c5f5b5461ae5ef440a4c.png

3c6cafce68eb941a00f1998f1d3d3aa6.giftry9b8a8a44dd1c74ae49c20a7cd451974e.png{      

d18c02628675d0a2c816449d98bda930.png//定义报表运行环境,用于执行报表d18c02628675d0a2c816449d98bda930.pngString envpath="D:\\FineReport_7.1\\WebReport\\WEB-INF";      

d18c02628675d0a2c816449d98bda930.png             FRContext.setCurrentEnv(newLocalEnv(envpath));    

d18c02628675d0a2c816449d98bda930.png     ModuleContext.startModule(EngineModule.class.getName());    

d18c02628675d0a2c816449d98bda930.png//读取环境下的模板文件d18c02628675d0a2c816449d98bda930.pngTemplateWorkBook workbook=TemplateWorkBookIO.readTemplateWorkBook(FRContext.getCurrentEnv(),    

d18c02628675d0a2c816449d98bda930.png"doc\\Primary\\DetailReport\\Details.cpt");    

d18c02628675d0a2c816449d98bda930.png//读取用于保存的参数值的txt文件d18c02628675d0a2c816449d98bda930.pngFile parafile=newFile(envpath+"\\para.txt");    

d18c02628675d0a2c816449d98bda930.png    FileInputStream fileinputstream;    

d18c02628675d0a2c816449d98bda930.png    fileinputstream=newFileInputStream(parafile);    

d18c02628675d0a2c816449d98bda930.png    BufferedReader bufferedReader=newBufferedReader(newInputStreamReader(fileinputstream));    

d18c02628675d0a2c816449d98bda930.png//定义保存参数的map,用于执行报表d18c02628675d0a2c816449d98bda930.pngjava.util.Map paramap=newjava.util.HashMap();    

97e794c86028c5f5b5461ae5ef440a4c.png

3c6cafce68eb941a00f1998f1d3d3aa6.gif/**//*d18c02628675d0a2c816449d98bda930.png     * 遍历参数值所在txt文件,txt文件中参数保存形式为 para1,para2 江苏,陈羽 江苏,安娜 首先取出第一行保存参数名称  

d18c02628675d0a2c816449d98bda930.png     * 遍历每个参数组合,如para1=江苏、para2=陈羽,根据参数执行模板,并将结果导出excel excel文件名为名称+导出编号  

ecedf933ec37d714bd4c2545da43add2.png*/d18c02628675d0a2c816449d98bda930.png//读第一行,保存参数名称d18c02628675d0a2c816449d98bda930.pngString lineText=bufferedReader.readLine();    

d18c02628675d0a2c816449d98bda930.png    lineText=lineText.trim();    

d18c02628675d0a2c816449d98bda930.png    String[] paraname=StableUtils.splitString(lineText,",");    

d18c02628675d0a2c816449d98bda930.png    System.out.println(Arrays.toString(paraname));    

d18c02628675d0a2c816449d98bda930.png//遍历每个参数组合,执行模板,导出结果d18c02628675d0a2c816449d98bda930.pngintnumber=0;    

97e794c86028c5f5b5461ae5ef440a4c.png

3c6cafce68eb941a00f1998f1d3d3aa6.gifwhile((lineText=bufferedReader.readLine())!=null)9b8a8a44dd1c74ae49c20a7cd451974e.png{    

d18c02628675d0a2c816449d98bda930.png        lineText=lineText.trim();    

d18c02628675d0a2c816449d98bda930.png        String[] paravalue=StableUtils.splitString(lineText,",");    

97e794c86028c5f5b5461ae5ef440a4c.png

3c6cafce68eb941a00f1998f1d3d3aa6.giffor(intj=0; j{    

d18c02628675d0a2c816449d98bda930.png            paramap.put(paraname[j], paravalue[j]);    

ecedf933ec37d714bd4c2545da43add2.png        }d18c02628675d0a2c816449d98bda930.png        ResultWorkBook result=workbook.execute(paramap,newWriteActor());  

d18c02628675d0a2c816449d98bda930.png        OutputStream outputstream=newFileOutputStream(newFile("E:\\ExportEg"+number+".xls"));    

d18c02628675d0a2c816449d98bda930.png        ExcelExporter excelexporter=newExcelExporter();    

d18c02628675d0a2c816449d98bda930.png        excelexporter.export(outputstream, result);    

d18c02628675d0a2c816449d98bda930.png//最后要清空一下参数map,用于下次计算d18c02628675d0a2c816449d98bda930.pngparamap.clear();    

d18c02628675d0a2c816449d98bda930.png        number++;    

d18c02628675d0a2c816449d98bda930.png        outputstream.close();  

ecedf933ec37d714bd4c2545da43add2.png        }d18c02628675d0a2c816449d98bda930.png    ModuleContext.stopModules();

97e794c86028c5f5b5461ae5ef440a4c.png

3c6cafce68eb941a00f1998f1d3d3aa6.gif    }catch(Exception e)9b8a8a44dd1c74ae49c20a7cd451974e.png{    

d18c02628675d0a2c816449d98bda930.png        e.printStackTrace();    

ecedf933ec37d714bd4c2545da43add2.png    }ecedf933ec37d714bd4c2545da43add2.png          }8f1ba5b45633e9678d1db480c16cae3f.png}4f1150b881333f12a311ae9ef34da474.png

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

5d78fbcba11f3e339893f8d9e51ff325.png

内容分别为

112ca8d0d92c84b92018422db99434ac.png

ef44336e11656254442368257c9589d5.png

这样批量导出便成功了。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值