后台批量导出Excel- http://help.finereport.com/doc-view-738.html
根据这上边的代码自己写了个java。。本地直接运行java测试成功。
把class文件放到图片所示的地方。。
然后自定义函数里边写一个java调用这个函数。如图所示
然后在帆软里边调用这个自定义函数,调用时tomcat和帆软后台都没报错。。返回值提示成功。。文件也生成,但是帆软的插件就崩溃了。。
求大神帮帮忙
java代码
package com.fr.io.e;
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.TemplateWorkBookIO;
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;
import com.sun.scenario.effect.Bloom;
public class ExportBatch {
static String envpath = "/opt/apache-tomcat-8.5.16/webapps/WebReport/WEB-INF";
static boolean falg = true;
/*
public static void main(String args) {
ExportBatch a = new ExportBatch();
boolean f = a.xls("报表名称","报表路径",new File("txt文件"),"C");
System.out.println(f);
}
*/
public ExportBatch(){
}
public ExportBatch(Object o){
}
public boolean xls(String cptName,String cptPath,File parafile,String filePath){
falg = true;
//ExportBatch.export("报表名称","报表路径",new File("txt文件"),"C");
ExportBatch.export(cptName,cptPath,parafile,filePath);
return falg;
}
/*
* cptName--cpt的报表名称
* cptPath--cpt的报表路径
* parafile--用于传参数用的txt文件的存放路径
* filePath--盘符路径如C、D、E
*/
public static void export(String cptName,String cptPath,File parafile,String filePath){
try {
// 定义报表运行环境,用于执行报表
//static String envpath = "/opt/apache-tomcat-8.5.16/webapps/WebReport/WEB-INF";
FRContext.setCurrentEnv(new LocalEnv(envpath));
ModuleContext.startModule(EngineModule.class.getName());
// 读取环境下的模板文件
TemplateWorkBook workbook = TemplateWorkBookIO.readTemplateWorkBook(FRContext.getCurrentEnv(),cptPath);
//用参数替换 "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, paravalue);
}
ResultWorkBook result = workbook.execute(paramap,new WriteActor());
OutputStream outputstream = new FileOutputStream(new File(filePath+":\\"+ cptName + lineText + ".xls"));
ExcelExporter excelexporter = new ExcelExporter();
excelexporter.export(outputstream, result);
// 最后要清空一下参数map,用于下次计算
paramap.clear();
number++;
outputstream.close();
}
ModuleContext.stopModules();
System.out.print("try");
} catch (Exception e) {
//e.printStackTrace();
falg = false;
System.out.println("catch");
}
}
}自定义函数的代码
package com.fr.test;
import java.io.File;
import com.fr.io.e.ExportBatch;
import com.fr.script.AbstractFunction;
public class CSUM extends AbstractFunction {
public Object run(Object args) {
ExportBatch a = new ExportBatch();
boolean f = a.xls("AA","doc/Primary/DetailReport/Details.cpt",new File("/opt/apache-tomcat-8.5.16/webapps/WebReport/a.txt"),"D");
//System.out.println(f);
return f;
}
}
编辑于 2018-1-12 10:01
编辑于 2018-1-12 10:02