历史版本11 :Excel直接转成模板cpt 返回文档
编辑时间:
内容长度:图片数:目录数:
修改原因:
1. 问题描述编辑
存在很多Excel文件,要将它们转成cpt模板,不想通过设计器手动一张张导入,希望用程序在后台批量转换。
2. 解决方案编辑
通过程序读取Excel文件转为模板TemplateWorkBook,然后把模板输出为cpt文件。
3. 示例编辑
3.1 读取Excel文件转为模板
TemplateWorkBook
File excelFile = new File("D:\\aa.xlsx"); // 获取EXCEL文件
FileInputStream a = new FileInputStream(excelFile);
3.2 再输出成cpt文件
2003版excel
TemplateWorkBook tpl = new ExcelReportImporter().generateWorkBookByStream(a);
OutputStream outputStream = new FileOutputStream(new File("D:\\abc.cpt")); // 转换成cpt模板
((WorkBook) tpl).export(outputStream);
2007版excel
TemplateWorkBook tpl = new Excel2007ReportImporter().generateWorkBookByStream(a);
OutputStream outputStream = new FileOutputStream(new File("D:\\abc.cpt")); // 转换成cpt模板
((WorkBook) tpl).export(outputStream);
3.3 准备excel文件
分别另存为aa.xls和aa.xlsx到对应的路径,下面的代码中需要根据实际excel文件存放的路径修改
3.4 2007版excel完整代码如下:
注:这里以xlsx代码为例,xls代码按照3.2进行修改,并修改import包即可
在一般情况下,若您希望在FineReport设计器基础上进行二次开发,我们可以在Eclipse或idea中通过调用FineReport启动类来启动设计器,以便于开发过程中的调试和二次开发的准备。
注意需要引入FineReport设计器下的jar包,详细点击Eclipse中启动设计器。
注:定义报表运行环境需要根据实际设计器的安装路径,比如安装在C盘,即 String envPath = "C://FineReport_10.0//webapps//webroot//WEB-INF"
另:excel文件路径也需要根据实际情况修改,例如文件在D盘,即D:\\aa.xlsx
package com.fr.io;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.OutputStream;
import com.fr.base.operator.common.CommonOperator;
import com.fr.chart.activator.ChartBaseActivator;
import com.fr.config.activator.BaseDBActivator;
import com.fr.config.activator.ConfigurationActivator;
import com.fr.data.impl.config.activator.RestrictionActivator;
import com.fr.env.operator.CommonOperatorImpl;
import com.fr.main.impl.WorkBook;
import com.fr.io.importer.Excel2007ReportImporter;
import com.fr.main.TemplateWorkBook;
import com.fr.module.Module;
import com.fr.module.tool.ActivatorToolBox;
import com.fr.report.ReportActivator;
import com.fr.report.module.ReportBaseActivator;
import com.fr.store.StateServerActivator;
import com.fr.workspace.simple.SimpleWork;
public class ExcelToCpt {
public static void main(String[] args) throws Exception {
// 首先需要定义执行所在的环境,这样才能正确读取数据库信息
// 定义报表运行环境,用于执行报表
Module module = ActivatorToolBox.simpleLink(new BaseDBActivator(),
new ConfigurationActivator(),
new StateServerActivator(),
new ReportBaseActivator(),
new RestrictionActivator(),
new ReportActivator(),
new ChartBaseActivator());
SimpleWork.supply(CommonOperator.class, new CommonOperatorImpl());
String envpath= "//Applications//FineReport10_325//webapps//webroot//WEB-INF"; //工程路径
SimpleWork.checkIn(envpath);
module.start();
File excelFile = new File("//Users//susie//Downloads//aa.xlsx"); // 获取EXCEL文件
FileInputStream a = new FileInputStream(excelFile);
TemplateWorkBook tpl = new Excel2007ReportImporter().generateWorkBookByStream(a);
OutputStream outputStream = new FileOutputStream(new File("//Users//susie//Downloads//abc.cpt")); // 转换成cpt模板
((WorkBook) tpl).export(outputStream);
outputStream.close();
module.stop();
}
}
3.4 编译并运行
编译并运行该程序,就会在对应路径下导出abc.cpt模板文件,我们用设计器打开模板,可以看到,EXCEL里面的数据已经保存至模板文件里面了。