反饋已提交

網絡繁忙

讀取修改報表

1. 概述

1.1 應用場景

可以透過 java 程式讀取一個範本,讀取後在程式中修改報表的屬性,然後重新匯出成範本檔案。如下圖所示,讀取範本檔案Parameter.cpt,在程式中修改 A1 儲存格的字體為紅色,然後匯出成範本檔案,匯出後在設計器開啟範本,A1 儲存格字體變成紅色。

Snipaste_2025-06-18_11-57-01.png

1.2 實現原理

1)讀取某一路徑下的範本 cpt 檔案,並將其轉為 WorkBook 物件,有兩種讀取報表的方法:

  • 直接以檔案絕對路徑讀取;

  • 先定義報表運作環境,然後從運作環境中直接讀取相對路徑下的範本。

絕對路徑讀取範本:

WorkBook workbook = (WorkBook) TemplateWorkBookIO
.readTemplateWorkBook(
"//doctw//Primary//Parameter//範本參數.cpt");

讀取報表運作環境:

// 定義報表運作環境,用於執行報表
String envpath = "C:\\FineReport_10.0\\webapps\\webroot\\WEB-INF";//工程路徑
SimpleWork.checkIn(envpath);
module.start();

2)修改報表儲存格屬性

// 獲得WorkBook中的WorkSheet,進而修改A1儲存格的文字色彩色為紅色
TemplateElementCase report = (TemplateElementCase) workbook
.getReport(0);
// getCellElement(int column, int row),column和row都從0開始,因此A1儲存格便是第0欄第0列    
CellElement cellA1 = report.getCellElement(0, 0);
FRFont frFont = FRFont.getInstance();
frFont = frFont.applyForeground(Color.red);
Style style = Style.getInstance();
style = style.deriveFRFont(frFont);
cellA1.setStyle(style);

3)將修改過的範本重新匯出

//儲存範本
FileOutputStream outputStream = new FileOutputStream(new File(
"C:\\test\\newParameter1.cpt"));
((WorkBook) workbook).export(outputStream);

2. 範例

以下範例讀取內建範本 Parameter.cpt 修改 A1 儲存格字體樣式後,將結果匯出成 cpt 檔案。

2.1 準備編譯環境

編譯程式前,需先建立一個 Java 工程環境,並且需要一個 Java 編輯器,如 Eclipse 或 idea 。

在編輯器工程中匯入 FineReport 工程 JAR 包。包括使用者自己報表工程

%FR_HOME%/lib下的所有的包,

%FR_HOME%/server/lib 下的所有包,

%FR_HOME%/webapps/webroot/WEB-INF/lib下的所有包,

還要引入 JDK 下的 tools.jar。詳細操作可參考:編譯Java程式 

2.2 編寫 Java 程式

在編輯器中編寫 Java 程式 SimpleDemo.java,即讀取內建範本 Parameter.cpt 修改 A1 儲存格字體樣式後,將結果匯出成 cpt 檔案。完整程式碼可參見:

注:使用者使用時,注意將範例程式碼中的工程路徑、範本名稱和匯出路徑取代為使用者自己工程下的。

package com.fr.io;
import com.fr.base.Style;
import com.fr.base.operator.common.CommonOperator;
import com.fr.chart.activator.ChartBaseActivator;
import com.fr.cluster.engine.activator.standalone.StandaloneModeActivator;
import com.fr.config.activator.BaseDBActivator;
import com.fr.config.activator.ConfigurationActivator;
import com.fr.env.operator.CommonOperatorImpl;
import com.fr.general.FRFont;
import com.fr.general.I18nResource;
import com.fr.health.activator.ModuleHealActivator;
import com.fr.main.impl.WorkBook;
import com.fr.module.Module;
import com.fr.module.tool.ActivatorToolBox;
import com.fr.report.ReportActivator;
import com.fr.report.RestrictionActivator;
import com.fr.report.cell.CellElement;
import com.fr.report.elementcase.TemplateElementCase;
import com.fr.report.module.ReportBaseActivator;
import com.fr.report.write.WriteActivator;
import com.fr.scheduler.SchedulerActivator;
import com.fr.store.StateServiceActivator;
import com.fr.workspace.simple.SimpleWork;
import java.awt.Color;
import java.io.File;
import java.io.FileOutputStream;
public class SimpleDemo {
    public static void main(String[] args) {
        // 首先需要定義執行所在的環境,這樣才能正確讀取資料庫資訊
        // 定義報表運作環境,用於執行報表
        Module module = ActivatorToolBox.simpleLink(new BaseDBActivator(),
                new ConfigurationActivator(),
                new ResourceRepositoryActivator(),
                new StandaloneModeActivator(),
                new ModuleHealActivator(),
                new StateServiceActivator(),
                new ChartBaseActivator(),
                new SchedulerActivator(),
                new ReportBaseActivator(),
                new RestrictionActivator(),
                new ReportActivator(),
                new WriteActivator());
        SimpleWork.supply(CommonOperator.class, new CommonOperatorImpl());
        String envpath = "//Applications//FineReport10_325//webapps//webroot//WEB-INF";//工程路徑
        SimpleWork.checkIn(envpath);
        I18nResource.getInstance();
        module.start();
        try {
            WorkBook workbook = (WorkBook) TemplateWorkBookIO
                    .readTemplateWorkBook(
                            "//doctw//Primary//Parameter//範本參數.cpt");
            // 獲得WorkBook中的WorkSheet,進而修改A1儲存格的文字色彩色為紅色
            TemplateElementCase report = (TemplateElementCase) workbook
                    .getReport(0);
            // getCellElement(int column, int
            // row),column和row都從0開始,因此A1儲存格便是第0欄第0列
            CellElement cellA1 = report.getCellElement(0, 0);
            FRFont frFont = FRFont.getInstance();
            frFont = frFont.applyForeground(Color.red);
            Style style = Style.getInstance();
            style = style.deriveFRFont(frFont);
            cellA1.setStyle(style);
            // 儲存範本
            FileOutputStream outputStream = new FileOutputStream(new File(
                    "/Users//susie//Downloads//newParameter1.cpt"));
            ((WorkBook) workbook).export(outputStream);
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            SimpleWork.checkOut();
        }
    }
}

2.3 編譯 Java 檔案

Java 程式編寫完成後,在編譯器中編譯 SimpleDemo.java ,編譯透過後,就會在程式碼中匯出路徑的資料夾下生成修改過的新檔案 newParameter1.cpt,這樣就實現了讀取範本後修改範本。用設計器開啟匯出範本,可以看到,A1 儲存格的顏色變成了紅色。如下圖所示:

Snipaste_2025-06-18_11-51-52.png

附件列表


主題: 二次開發
已經是第一篇
已經是最後一篇
  • 有幫助
  • 沒幫助
  • 只是瀏覽
  • 圖片不清晰
  • 用語看不懂
  • 功能說明看不懂
  • 操作說明太簡單
  • 內容有錯誤
中文(繁體)

滑鼠選中內容,快速回饋問題

滑鼠選中存在疑惑的內容,即可快速回饋問題,我們將會跟進處理。

不再提示

10s後關閉

獲取幫助
線上支援
獲取專業技術支援,快速幫助您解決問題
工作日9:00-12:00,13:30-17:30在线
頁面反饋
針對當前網頁的建議、問題反饋
售前咨詢
業務咨詢
電話:0933-790886或 0989-092892
郵箱:taiwan@fanruan.com
頁面反饋
*問題分類
不能為空
問題描述
0/1000
不能為空

反馈已提交

网络繁忙