历史版本1 :通过代码创建模板 返回文档
编辑时间: 内容长度:图片数:目录数: 修改原因:

老系统通过大量存储过程展示数据,现在迁移到帆软后如果人工迁移,成本不少。由于帆软开有大量的api可以调用,

找到生成cpt模板的api就可以自己通过java代码生成cpt模板了。

通过查看论坛的现在文档,暂时写了一套代码(以前搞其它语言的,java代码写的不是太熟练),特发出来供有同样

需要有人参考。


package com.winnning; import com.fr.base.TableData; import com.fr.data.impl.DBTableData; import com.fr.data.impl.NameDatabaseConnection; import com.fr.general.ModuleContext; import com.fr.general.data.TableDataColumn; import com.fr.report.cell.DefaultTemplateCellElement; import com.fr.report.cell.TemplateCellElement; import com.fr.report.cell.cellattr.core.group.DSColumn; import com.fr.report.module.EngineModule; import java.io.File; import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.InputStream; import java.util.HashMap; import java.util.Iterator; import com.fr.main.impl.WorkBook; import com.fr.report.report.TemplateReport; import com.fr.report.worksheet.WorkSheet; public class GenericTemplate { public static void main(String[] args) throws Exception { ModuleContext.startModule(EngineModule.class.getName()); WorkBook wb = new WorkBook(); //添加新的模板数据集 TableData td = genericTableData("dbLink", "exec usp_admin_debug @id=${id}"); wb.putTableData("科室信息2", td); //创建第一个report 也就是sheet页 WorkSheet report = new WorkSheet(); wb.addReport(report); //数据库暂时先不读,弄点假数据 HashMap<Integer, String> map = new HashMap<>(); map.put(0, "id"); map.put(1, "name"); //添加列头 DefaultTemplateCellElement title = genericCell(0, 0, null, "这是标题"); title.setRowSpan(2); title.setColumnSpan(2); report.addCellElement(title); //添加数据列 for (Integer key : map.keySet()) { TemplateCellElement cellHeaer = genericCell(2, key, null, map.get(key)); report.addCellElement(cellHeaer); TemplateCellElement cell = genericCell(3, key, "科室信息2", map.get(key)); report.addCellElement(cell); } //导出模板 FileOutputStream outputStream = new FileOutputStream(new File("E:\\Temp\\3.cpt")); wb.export(outputStream); outputStream.close(); ModuleContext.stopModules(); System.out.println("finished"); } /* *生成TableData */ private static TableData genericTableData(String conString, String sqlQuery) { NameDatabaseConnection database = new NameDatabaseConnection(conString); TableData td = new DBTableData(database, sqlQuery); // NameDatabaseConnection database = new NameDatabaseConnection("winningreport"); // TableData td = new DBTableData(database, "exec usp_admin_debug @id=${id}"); return td; } /** * 添加单元格 * row 行号 * column 列号 * dsName 数据集名称 如 ds1 * 数据列名称如 ds1中的id列,则输入 id */ private static DefaultTemplateCellElement genericCell(int row, int column, String dsName, String columnName) { DefaultTemplateCellElement dtCell = new DefaultTemplateCellElement(row, column); if (dsName != null) { DSColumn dsColumn = new DSColumn(); dsColumn.setDSName(dsName); dsColumn.setColumn(TableDataColumn.createColumn(columnName)); dtCell.setValue(dsColumn); } else { dtCell.setValue(columnName); } return dtCell; } } //自动执行存储过程,从里面获取结果集结的部分等研究一下jdbc再补