Java軟件報表軟件技術博客

          java報表軟件技術匯總 java報表軟件制作 報表軟件新聞
          posts - 355, comments - 100, trackbacks - 0, articles - 3
             :: 首頁 :: 新隨筆 ::  :: 聚合  :: 管理

          在日常使用報表過程中,會有這樣一種情況,你將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文件,如下

          內容分別為

          這樣批量導出便成功了。




          主站蜘蛛池模板: 从江县| 股票| 天祝| 托克托县| 莎车县| 萨嘎县| 绥芬河市| 申扎县| 精河县| 屏南县| 华容县| 麻城市| 巫溪县| 托里县| 保定市| 乌苏市| 阜康市| 桂东县| 登封市| 铁力市| 深州市| 若尔盖县| 凤山市| 沈丘县| 永新县| 桐城市| 岐山县| 宜川县| 囊谦县| 嘉黎县| 连云港市| 东乡族自治县| 蛟河市| 门头沟区| 旺苍县| 平谷区| 延边| 中阳县| 将乐县| 桂东县| 巫溪县|