企業級報表常面臨:**下發 Excel 模板給員工填寫 → 回收大量 Excel → 批量導入數據庫** 或 **按條件批量導出多個 Excel 文件** 的需求。FineReport 提供 op=excel_submit 免預覽導入與 ExcelExporter 批量導出 API,本文給出完整實現代碼與關鍵配置。
op=fs) → 走平台用戶體系;op=fr_platform) → 走集成系統用戶體系。POST /WebReport/ReportServer?op=excel_submit&reportlet=xxx.cpt,multipart 上傳 Excel 文件。para.txt),每行一組參數(如 省份,姓名);TemplateWorkBook.execute(params) 計算報表;ExcelExporter.export(outputStream, resultWorkBook) 導出單個 Excel;模板名_序號.xls。package com.fr.io;
import java.io.*;
import java.util.*;
import com.fr.base.FRContext;
import com.fr.dav.LocalEnv;
import com.fr.general.ModuleContext;
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 {
// 1. 初始化報表運行環境
String envPath = "D:\\FineReport_7.1\\WebReport\\WEB-INF";
FRContext.setCurrentEnv(new LocalEnv(envPath));
ModuleContext.startModule(EngineModule.class.getName());
// 2. 讀取模板
TemplateWorkBook workbook = TemplateWorkBookIO.readTemplateWorkBook(
FRContext.getCurrentEnv(), "doc\\Primary\\DetailReport\\Details.cpt");
// 3. 讀取參數文件
File paraFile = new File(envPath + "\\para.txt");
try (BufferedReader br = new BufferedReader(new InputStreamReader(new FileInputStream(paraFile)))) {
String header = br.readLine().trim();
String[] paramNames = StableUtils.splitString(header, ",");
Map<String, Object> params = new HashMap<>();
int idx = 0;
String line;
while ((line = br.readLine()) != null) {
String[] values = StableUtils.splitString(line.trim(), ",");
for (int i = 0; i < paramNames.length; i++) params.put(paramNames[i], values[i]);
// 4. 執行報表並導出
ResultWorkBook result = workbook.execute(params, new WriteActor());
try (OutputStream os = new FileOutputStream("E:\\ExportEg" + idx + ".xls")) {
new ExcelExporter().export(os, result);
}
params.clear();
idx++;
}
}
ModuleContext.stopModules();
} catch (Exception e) { e.printStackTrace(); }
}
}
省份,姓名 江蘇,陳羽 江蘇,安娜 浙江,李四
生成 ExportEg0.xls、ExportEg1.xls、ExportEg2.xls 三個文件,分別包含對應參數下的報表數據。
FRContext 非線程安全,多線程導出需隔離環境;