历史版本2 :Excel直接转成模板cpt 返回文档
编辑时间: 内容长度:图片数:目录数: 修改原因:

1. 问题描述编辑

存在很多Excel文件,要将它们转成cpt模板,不想通过设计器手动一张张导入,希望用程序在后台批量转换。

2. 解决方案编辑

通过程序读取Excel文件转为模板TemplateWorkBook,然后把模板输出为cpt文件。

3. 示例编辑

3.1 读取Excel文件转为模板
TemplateWorkBook
HTML/XML代码
File excelFile = new File("D:\\aa.xls"); // 获取EXCEL文件  
        FileInputStream a = new FileInputStream(excelFile);  
3.2 再输出成cpt文件
HTML/XML代码
TemplateWorkBook tpl = new ExcelReportImporter().generateWorkBookByStream(a);  
        OutputStream outputStream = new FileOutputStream(new File("E:\\abc.cpt")); // 转换成cpt模板  
        ((WorkBook) tpl).export(outputStream);  
3.3 完整代码如下
HTML/XML代码
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.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 {      
        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包,具体代码如下:
HTML/XML代码
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.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 {      
        File excelFile = new File("D:\\API.xls"); // 获取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();  
    }      
}  
注:最新的代码链接fine-help
3.4 编译并运行

编译并运行该程序,就会在E盘下导出abc.cpt模板文件,我们用设计器打开模板,可以看到,EXCEL里面的数据已经保存至模板文件里面了。