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

简介:

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

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


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

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
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(newFile( "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文件,如下

内容分别为

这样批量导出便成功了。



本文转自 雄霸天下啦 51CTO博客,原文链接:http://blog.51cto.com/10549520/1834653,如需转载请自行联系原作者

相关文章
|
12天前
|
Java 数据库 数据安全/隐私保护
Java操作Excel文件导入导出【内含有 jxl.jar 】
Java操作Excel文件导入导出【内含有 jxl.jar 】
22 0
|
7天前
|
Java easyexcel
java开发excel导入导出工具类基于EasyExcel
java开发excel导入导出工具类基于EasyExcel
15 1
|
12天前
|
Java API Spring
集成EasyPoi(一个基于POI的Excel导入导出工具)到Spring Boot项目中
集成EasyPoi(一个基于POI的Excel导入导出工具)到Spring Boot项目中
56 1
|
13天前
|
easyexcel Java API
SpringBoot集成EasyExcel 3.x:高效实现Excel数据的优雅导入与导出
SpringBoot集成EasyExcel 3.x:高效实现Excel数据的优雅导入与导出
41 1
|
6天前
|
前端开发 Java 开发工具
如何在Spring Boot框架下实现高效的Excel服务端导入导出?
ArtifactId:是项目的唯一标识符,在实际开发中一般对应项目的名称,就是项目根目录的名称。 Group Id,Artfact Id是保证项目唯一性的标识,一般来说如果项目打包上传至maven这样的包管理仓库中。在搜索你的项目时,Group Id,Artfact Id是必要的条件。 Version:版本号,默认0.0.1-SNAPSHOT。SNAPSHOT代表不稳定的版本,与之相对的有RELEASE。 Project type:工程的类型,maven工程还是gradle工程。 Language:语言(Java,Kotlin,Groovy)。
|
6天前
|
easyexcel Java API
Apache POI与easyExcel:Excel文件导入导出的技术深度分析
Apache POI与easyExcel:Excel文件导入导出的技术深度分析
|
2月前
|
Android开发
Android 开发 读取excel文件 jxl.jar包
Android 开发 读取excel文件 jxl.jar包
25 0
|
2月前
|
Java easyexcel Maven
【Java专题_04】集成EasyExcel进行Excel导入导出详细教程
【Java专题_04】集成EasyExcel进行Excel导入导出详细教程
263 0
|
2月前
|
前端开发
若依框架 ------- 导入导出(Excel)
若依框架 ------- 导入导出(Excel)
159 0
|
2月前
|
前端开发 Java
基于Java爬取微博数据(二) 正文长文本+导出数据Excel
【5月更文挑战第12天】基于Java爬取微博数据,正文长文本+导出数据Excel