FineReport 报表模板生成+导出Excel表格

 

跟spring boot 整合 :https://blog.csdn.net/zhanglixin_1984/article/details/79194145

看官方的文档纠结了一天,好东西,这个怎么下手,但是还是想总结一下。

FineReport报表技术,给我的感觉跟IReport报表的思路差不多,所以我就抱着这种试试的心态去尝试,在我搜集资料加看官方文档之后,觉得更像了!!!

FineReport报表软件是一款纯java编写的,集数据展示(报表)和数据录入(单表)功能与一身的企业级web报表工具,可以简单的应用多业务的系统数据,集中数据于一张报表,还有类EXCEL的设计模式,EXCEL+绑定数据列的形式支持SHEET和跨SHEET的计算(跟IReport的功能有点相似,但是比较强大),完美兼容EXCEL公式,支持导入现有的Excel表样制作报表。

数据的支持:

支持的数据库有:Orcal、sql server 、DB2、my sql 等主流的关系型数据库

文本数据源:包括Excel文件、Txt文件等存储在文件中的数据

下面进入正题:主要讲解两个方面,模板的生成+于模板整合导出Excel表格

1,模板的生成

     1.1:新建模板   -- 打开安装完成的软件,点击图中所指的按钮,即可完成表格的新建

                  FineReport 报表模板生成+导出Excel表格_第1张图片

     1.2: 数据库的配置

FineReport 报表模板生成+导出Excel表格_第2张图片

FineReport 报表模板生成+导出Excel表格_第3张图片  

1.3:数据的获取和数据的添加   -- 数据是从数据库中获取,这里我以Orcal数据库为例

                         FineReport 报表模板生成+导出Excel表格_第4张图片

          FineReport 报表模板生成+导出Excel表格_第5张图片

        FineReport 报表模板生成+导出Excel表格_第6张图片

点击保存之后,会在左下角显示你保存的sql语句

                                           FineReport 报表模板生成+导出Excel表格_第7张图片

FineReport 报表模板生成+导出Excel表格_第8张图片

上图点击确定之后,就会显示数据,可自行完成

模板设计(此处跟IReport是一样的,首先从数据库中查询出数据,然后在进行数据的设置)

FineReport 报表模板生成+导出Excel表格_第9张图片

FineReport 报表模板生成+导出Excel表格_第10张图片

FineReport 报表模板生成+导出Excel表格_第11张图片

FineReport 报表模板生成+导出Excel表格_第12张图片

2,代码编写

 

  1. package com.fr.io;        
  2.         
  3. import java.io.BufferedReader;        
  4. import java.io.File;        
  5. import java.io.FileInputStream;        
  6. import java.io.FileOutputStream;        
  7. import java.io.InputStreamReader;        
  8. import java.io.OutputStream;        
  9. import java.util.Arrays;        
  10. import com.fr.base.FRContext;        
  11. import com.fr.general.ModuleContext;  
  12. import com.fr.dav.LocalEnv;    
  13.     
  14. import com.fr.io.exporter.ExcelExporter;    
  15. import com.fr.main.TemplateWorkBook;      
  16. import com.fr.main.workbook.ResultWorkBook;  
  17. import com.fr.report.module.EngineModule;  
  18. import com.fr.stable.StableUtils;    
  19. import com.fr.stable.WriteActor;  
  20.        
  21.          
  22.  public class ExportBatch {        
  23.      public static void main(String[] args) {        
  24.          try {        
  25.              // 定义报表运行环境,用于执行报表        
  26.              String envpath = "D:\\FineReport_7.1\\WebReport\\WEB-INF";        
  27.              FRContext.setCurrentEnv(new LocalEnv(envpath));      
  28.      ModuleContext.startModule(EngineModule.class.getName());      
  29.     // 读取环境下的模板文件      
  30.     TemplateWorkBook workbook = TemplateWorkBookIO.readTemplateWorkBook(FRContext.getCurrentEnv(),      
  31.         "doc\\Primary\\DetailReport\\Details.cpt");      
  32.     // 读取用于保存的参数值的txt文件      
  33.     File parafile = new File(envpath + "\\para.txt");      
  34.     FileInputStream fileinputstream;      
  35.     fileinputstream = new FileInputStream(parafile);      
  36.     BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(fileinputstream));      
  37.     // 定义保存参数的map,用于执行报表      
  38.     java.util.Map paramap = new java.util.HashMap();      
  39.     /*   
  40.      * 遍历参数值所在txt文件,txt文件中参数保存形式为 para1,para2 江苏,陈羽 江苏,安娜 首先取出第一行保存参数名称   
  41.      * 遍历每个参数组合,如para1=江苏、para2=陈羽,根据参数执行模板,并将结果导出excel excel文件名为名称+导出编号   
  42.      */      
  43.     // 读第一行,保存参数名称      
  44.     String lineText = bufferedReader.readLine();      
  45.     lineText = lineText.trim();      
  46.     String[] paraname = StableUtils.splitString(lineText, ",");      
  47.     System.out.println(Arrays.toString(paraname));      
  48.     // 遍历每个参数组合,执行模板,导出结果      
  49.     int number = 0;      
  50.     while ((lineText = bufferedReader.readLine()) != null) {      
  51.         lineText = lineText.trim();      
  52.         String[] paravalue = StableUtils.splitString(lineText, ",");      
  53.         for (int j = 0; j < paravalue.length; j++) {      
  54.             paramap.put(paraname[j], paravalue[j]);      
  55.         }      
  56.         ResultWorkBook result = workbook.execute(paramap,new WriteActor());    
  57.         OutputStream outputstream = new FileOutputStream(new File("E:\\ExportEg" + number + ".xls"));      
  58.         ExcelExporter excelexporter = new ExcelExporter();      
  59.         excelexporter.export(outputstream, result);      
  60.         // 最后要清空一下参数map,用于下次计算      
  61.         paramap.clear();      
  62.         number++;      
  63.         outputstream.close();    
  64.         }   
  65.     ModuleContext.stopModules();  
  66.     } catch (Exception e) {      
  67.         e.printStackTrace();      
  68.     }      
  69.           }      
  70. }  

上面的做法会因为帆软报表软件的运行而在查询的时候,很慢,最常用的就是在sql的查询语句中将要传入的参数直接变成形参,然后在调用的时候,形参直接在请求中传递过去,就可以直接执行SQL语句然后查询

你可能感兴趣的:(FineReport)