Excel直接转成模板cpt
1. 问题描述
存在很多Excel文件,要将它们转成cpt模板,不想通过设计器手动一张张导入,希望用程序在后台批量转换。
2. 解决方案
通过程序读取Excel文件转为模板TemplateWorkBook,然后把模板输出为cpt文件。
3. 示例
3.1 读取Excel文件转为模板
TemplateWorkBook
File excelFile = new File("D:\\aa.xls"); // 获取EXCEL文件
FileInputStream a = new FileInputStream(excelFile);
3.2 再输出成cpt文件
TemplateWorkBook tpl = new ExcelReportImporter().generateWorkBookByStream(a);
OutputStream outputStream = new FileOutputStream(new File("D:\\abc.cpt")); // 转换成cpt模板
((WorkBook) tpl).export(outputStream);
3.3 完整代码如下
package com.fr.io;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.OutputStream;
import com.fr.main.impl.WorkBook;
import com.fr.base.FRContext;
import com.fr.dav.LocalEnv;
import com.fr.fs.FSModule;
import com.fr.general.ModuleContext;
import com.fr.io.importer.ExcelReportImporter;
import com.fr.main.TemplateWorkBook;
import com.fr.page.stable.ReportPageAttr;
import com.fr.report.module.EngineModule;
public class ExcelToCpt {
public static void main(String[] args) throws Exception {
// 定义报表运行环境,才能执行报表
String envpath = "D:\\FineReport_8.0\\WebReport\\WEB-INF";
FRContext.setCurrentEnv(new LocalEnv(envpath));
File excelFile = new File("D:\\API.xls"); // 获取EXCEL文件
FileInputStream a = new FileInputStream(excelFile);
ModuleContext.startModule(EngineModule.class.getName());
TemplateWorkBook tpl = new ExcelReportImporter().generateWorkBookByStream(a);
OutputStream outputStream = new FileOutputStream(new File("D:\\abc.cpt")); // 转换成cpt模板
((WorkBook) tpl).export(outputStream);
outputStream.close();
ModuleContext.stopModules();
}
}
注:如果excel是2007版本的,需要将TemplateWorkBook tpl = new ExcelReportImporter().generateWorkBookByStream(a)改成 TemplateWorkBook tpl = new Excel2007ReportImporter().generateWorkBookByStream(a)并修改import包,具体代码如下:
package com.fr.io;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.OutputStream;
import com.fr.main.impl.WorkBook;
import com.fr.base.FRContext;
import com.fr.dav.LocalEnv;
import com.fr.fs.FSModule;
import com.fr.general.ModuleContext;
import com.fr.io.importer.Excel2007ReportImporter;
import com.fr.io.importer.ExcelReportImporter;
import com.fr.main.TemplateWorkBook;
import com.fr.page.stable.ReportPageAttr;
import com.fr.report.module.EngineModule;
public class ExcelToCpt {
public static void main(String[] args) throws Exception {
// 定义报表运行环境,才能执行报表
String envpath = "D:\\FineReport_8.0\\WebReport\\WEB-INF";
FRContext.setCurrentEnv(new LocalEnv(envpath));
File excelFile = new File("D:\\API.xlsx"); // 获取EXCEL文件
FileInputStream a = new FileInputStream(excelFile);
ModuleContext.startModule(EngineModule.class.getName());
TemplateWorkBook tpl = new Excel2007ReportImporter().generateWorkBookByStream(a);
OutputStream outputStream = new FileOutputStream(new File("D:\\abc.cpt")); // 转换成cpt模板
((WorkBook) tpl).export(outputStream);
outputStream.close();
ModuleContext.stopModules();
}
}
可能会遇到的问题:
1、如果是放到正式的webreport工程中,重新定义报表运行环境会造成:hsql死锁,因此建议:注释掉2、如果是放到bi工程中,可能造成决策平台访问不了,原因是startModule 和 stopModule对决策平台js加载有影响。
// String envpath = "D:\\FineReport_8.0\\WebReport\\WEB-INF";
// FRContext.setCurrentEnv(new LocalEnv(envpath));
// ModuleContext.startModule(EngineModule.class.getName());
// ModuleContext.stopModules();
3.4 编译并运行
编译并运行该程序,就会在D盘下导出abc.cpt模板文件,我们用设计器打开模板,可以看到,EXCEL里面的数据已经保存至模板文件里面了。
附件列表
标签:
已验证
文档内容仅供参考,如果你需要获取更多帮助,付费/准付费客户请咨询帆软技术支持
关于技术问题,您还可以前往帆软社区,点击顶部搜索框旁边的提问按钮
若您还有其他非技术类问题,可以联系帆软传说哥(qq:1745114201)