1. 程式人生 > >報表開發之批量匯入匯出Excel

報表開發之批量匯入匯出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

如果模板有兩個引數格式如下:


批量匯出程式,完整程式碼如下:

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檔案,如下

內容分別為

這樣批量匯出便成功了。



相關推薦

報表開發批量匯入匯出Excel

在日常使用報表過程中,會有這樣一種情況,你將Excel表分發給各個員工,員工填完後,統一整理成多個Excel,你需要將這些資料,用報表的填報功能,提交錄入到資料庫中,這樣一來可避免到伺服器機房錄資料的繁瑣步驟,但是無論是批量匯入和還是匯出Excel,這對諸多報表軟體或稱整合報

SSM整合開發實戰-poi匯入匯出excel-mvc三層模式開發體驗(福利:內附完整視訊教程)

    前面幾篇部落格雖然簡單的介紹了基於SSM的框架實現POI匯入匯出的介紹,但是也就只是“簡單的介紹”而已,而且沒有物盡其用。即整合出來的SSM其實還可以做其他很多的事情,閒暇之餘我又基於SSM開發了“產品資訊”的“增加 刪除 修改 更新”功能,目的是為了體會體會目前企業

SSM整合開發實戰-poi匯入匯出excel-尾聲

     前面介紹了ssm框架的整合開發以及後端介面部分的實現(如今對這些介面有了新的變動以及優化),本文將整合前端框架jquery-easyui來實現前後端介面的對接,更加直接的展示poi匯入匯出excel的效果。(視訊教程地址:https://edu.csdn.

SSM整合開發實戰-poi匯入匯出excel-開戰

   上一篇部落格介紹瞭如何完整的基於ssm搭建一個可用於實戰開發的專案,本文開始將用此專案用來開發若干idea。本文就先小試牛刀開發基於ssm框架實現poi匯入匯出excel檔案,憑良心講,這一需求其實在目前企業級應用開發中幾乎都用得到,那麼本文我將基於自己在專案中遇到的需

easyui datagrid 增刪改查分頁 匯出 先上傳後匯入 NPOI批量匯入 匯出EXCEL

效果圖資料庫程式碼 create database CardManage use CardManage create table CardManage ( ID int identity(1,1) primary key, userDep nvarchar(10)n

poi批量匯入匯出Excel(一、需要建資料庫表)

本專案基於SSM框架,簡單封裝了Excel批量匯入匯出功能,需要建資料庫表將資料匯入到表中,查詢遍歷出資料匯出Excel,下一篇文章介紹下不用建資料庫表一鍵匯入匯出Excel(點選跳轉),不過這樣只適用於對匯入的Excel表進行轉換。一、下載poi jar包:     點這裡

poi批量匯入匯出Excel(三、通過模板匯出Excel並能實現匯入多個sheet表)

本專案基於SSM框架,簡單封裝了Excel批量匯入匯出功能,不用建資料庫表一鍵匯入匯出Excel,不過這樣只適用於對匯入的Excel表進行轉換,通過模板匯出Excel並且能實現匯入多個sheet表。上一篇介紹了建表匯入匯出Excel(點選跳轉)一、下載poi jar包:點這裡

javapoi操作excel-批量匯入匯出

    上一篇博文介紹了poi操作excel的基本讀寫操作後,接下來,介紹一下在專案中的實際用途:批量匯入、批量匯出功能。因為重點知識介紹批量匯入匯出excel功能,故而專案整體的搭建後臺用jdbc與struts2,前端頁面用jquery-easyui實現(其實也可以整合到s

Excel批量匯入(匯出同理)

在做JavaWeb中新增資料使我們在所難免會遇到的,在大資料的環境下批量新增和批量刪除是必須的,而批量刪除只需要獲取到我們需要刪除的ID就可以了,在批量新增中我們就會遇到問題,問題是得到批量的資料,這就涉及到了poi技術中的Excel匯入匯出 在前端中我們使用

JasperReport報表開發轉置交叉表

for 不同的 結構 整理 result 無需 nbsp 數據 img 使用Jasper或BIRT等報表工具時,常會碰到一些很規的統計,用報表工具本身或SQL都難以處理,比方源數據不符合交叉表的要求,須要轉置後再呈現。集算器具有結構化強計算引擎,集成簡單。能夠協

基於SSM的POI匯入匯出Excel實戰-鍾林森-專題視訊課程

基於SSM的POI匯入匯出Excel實戰—282人已學習 課程介紹         本課程將給大家分享如何基於SSM實現POI匯入匯出Excel,並講解目前企業級JavaWeb應用mvc三層模式的開

JSP匯入匯出Excel功能

    匯入匯出功能需求是這樣的:按照條件查詢出結果,然後將這些結果以excel形式匯出;修改欄位資訊後(主鍵不允許修改)匯入即覆蓋原欄位資訊,完成更新。本例是藉助poi完成的,將poi-3.9.jar匯入到WEB-INF下的lib的資料夾,與此一起匯入的還有commons-io

NPOI匯入匯出Excel工具類

using System; using System.Collections.Generic; using System.IO; using System.Linq; using System.Reflection; using System.Text; using System.Web;

讓 .NET 更方便的匯入匯出 Excel

讓 .Net 更方便的匯入匯出Excel Intro 因為前一段時間需要處理一些 excel 資料,主要是匯入/匯出操作,將 Excel 資料轉化為物件再用程式進行處理和分析,沒有找到比較滿意的庫,於是就自己造了一個輪子,遮蔽掉了 xlsx 與 xls 的差別,遮蔽了 Npoi 操作 Excel 的細節,

poi匯出Excel Java POI匯入匯出Excel

Java POI匯入匯出Excel   1、異常java.lang.NoClassDefFoundError: org/apache/poi/UnsupportedFileFormatException     解決方法:     

Vue結合後臺詳解匯入匯出Excel問題

最近Vue專案中用到了匯入匯出功能,在網上搜索了一番之後,決定採用Blob方式,這也是大家推薦的一種的方式,特此做下記錄。 匯出Excel功能 這裡不談別人怎麼實現的,我是從後臺生成了Excel流檔案返回給前端的。 下面具體看一下後臺的程式碼: /** * 批量

Java匯入匯出Excel表格(xls版本、xlsx版本)

自己整合成的一個專門匯入匯出工具類 一、pom檔案導包: <!-- 匯入匯出Excel表格 --> <!-- https://mvnrepository.com/artifact/org.apache.poi/poi --> <depend

PowerDesigner 資料模型匯入匯出 Excel

目錄 匯出 資料模型匯出成 Excel 匯入 Excel 匯入成資料模型 附:PowerDesigner16.5 安裝包地址 連結:https://pan.baidu.com/s/1-JC2QF727OVW7U1zdiGd3A  提取碼:zam6 匯出

OLEDB匯入匯出Excel

using System;using System.Collections.Generic;using System.Data;using System.Data.OleDb;using System.IO;using System.Linq;using System.Text;using System.Th

java批量匯入匯出(poi)

一、批量匯入       1、匯入時我們接參時使用MultipartFile來接受excel檔案,用poi來讀取檔案內容        InputStream inputStream = MultipartFile.getInputStream();        Wor