如何调用标准excel导出组件

栏目:eas cloud知识作者:金蝶来源:金蝶云社区发布:2024-09-22浏览:2

如何调用标准excel导出组件

# 需求 如何将报表或是序时簿导出成excel2007格式。 # 实现步骤 ## 报表导出 报表导出首先需要获取报表Book对象,可以通过如下代码获取。 ```java import com.kingdee.bos.metadata.entity.EntityViewInfo; import com.kingdee.bos.metadata.entity.FilterInfo; import com.kingdee.bos.metadata.entity.FilterItemInfo; import com.kingdee.bos.metadata.entity.SelectorItemInfo; import com.kingdee.bos.metadata.query.util.CompareType; import com.kingdee.eas.fi.gr.cslrpt.CslReportCollection; import com.kingdee.eas.fi.gr.cslrpt.CslReportFactory; import com.kingdee.eas.fi.gr.cslrpt.CslRptUtil; public Map<ReportBaseInfo> getReports() throws BOSException { //创建查询视图 EntityViewInfo view =new EntityViewInfo(); view.getSelector().add(new SelectorItemInfo("*")); view.getSelector().add(new SelectorItemInfo("company.*")); Set<String> set=new HashSet<String>(); //添加报表ID set.add("id1"); view.setFilter(new FilterInfo()); //设置过滤条件为id in set view.getFilter().getFilterItems().add(new FilterItemInfo("id",set,CompareType.INCLUDE)); Map<String,ReportBaseInfo> reportMap = new HashMap<String,ReportBaseInfo>(); //根据报表类型获取报表实体 if(getUIContext().get("isCslRpt")!=null&&(Boolean)getUIContext().get("isCslRpt")){ CslReportCollection col = CslReportFactory.getRemoteInstance().getCslReportCollection(view); for(int i = 0 ; i < col.size() ; i ++){ reportMap.put(col.get(i).getId().toString(), col.get(i)); } }else{ ReportCollection col = ReportFactory.getRemoteInstance().getReportCollection(view); for(int i = 0 ; i < col.size() ; i ++){ reportMap.put(col.get(i).getId().toString(), col.get(i)); } } return reportMap; } ``` 通过上面的报表ReportBaseInfo对象获取里面的book对象调用导出。 ```java //客户端导出 import com.kingdee.eas.fi.gr.cslrpt.client.CslRptUIUtil; import com.kingdee.bos.ctrl.excel.model.struct.Book; //遍历报表对象map for (String k : reportMap.keySet()) { ReportBaseInfo info = reports.get(k); Book book = info.getBook(); //设置工作簿对象不需要计算,很关键一定要进行设置 book.setCalculate(false); try { //客户端导出可以调用这个工具类进行导出,如果在服务端调用会报错。 CslRptUIUtil.exportToExcel2007(book, "c:/test.xlsx", -1); CslRptUIUtil.exportToExcel2007After(); } catch (Exception e) { logger.error("export error", e); fail.append(" exportToExcel error:"+e.getMessage()).append("\n\n"); } } ``` ```java //服务端导出 import com.kingdee.eas.fi.gr.cslrpt.client.CslRptUIUtil; import com.kingdee.bos.ctrl.excel.model.struct.Book; import com.kingdee.bos.ctrl.kdf.excel.AbstractDataWrapper; import com.kingdee.bos.ctrl.kdf.excel.wrapper.IExportWrapper; import com.kingdee.bos.ctrl.kdf.excel.wrapper.SXSSFExportWrapper; import com.kingdee.bos.ctrl.kdf.excel.BookDataWrapper; //遍历报表对象map for (String k : reportMap.keySet()) { ReportBaseInfo info = reports.get(k); Book book = info.getBook(); //设置工作簿对象不需要计算,很关键一定要进行设置 book.setCalculate(false); //创建报表数据转换类 BookDataWrapper bookDataWrapper = new BookDataWrapper(book); //设置导出公式 bookDataWrapper.setExportFormula(true); //设置导出业务公式 bookDataWrapper.setExportCustomerFomulas(true); //下面两个导出隐藏行和列必须设置为true,否则导出包含融合块的报表会抛出异常 bookDataWrapper.setExportHideCols(true); bookDataWrapper.setExportHideRows(true); try { //服务端导出 IExportWrapper export = new SXSSFExportWrapper(bookDataWrapper); //导出到c:/test.xlsx export.write("c:/test.xlsx"); } catch (Exception e) { logger.error("export error", e); fail.append(" exportToExcel error:"+e.getMessage()).append("\n\n"); } } ``` ## 序时簿导出 一般的序时簿的导出由应用框架统一实现了无需再次开发,如果需要二开扩展可以参考如下代码。 ```java import com.kingdee.bos.ctrl.kdf.excel.ui.Excel2007ExportController; import com.kingdee.bos.ctrl.kdf.excel.ui.ExportListener; import com.kingdee.bos.ctrl.kdf.export.nio.KDTableDataWrapper; import com.kingdee.bos.ctrl.kdf.table.KDTable; /** * 重写ListUI导出方法 */ @Override public void actionExport_actionPerformed(ActionEvent action) throws Exception { //调用控件提供的大数据量导出Excel接口进行导出,kDTable_List为界面表格主体 KDTableDataWrapper wrapper = new KDTableDataWrapper(kDTable_List); //是否导出选中部分,false表示导出全表数据,true只导出选择部分 wrapper.setExportSelect(false); //是否导出合并行,导出融合块 wrapper.setExportMergeBlocks(true); //是否合并表头行导出,如果需要导出融合的表头需要设置为true wrapper.setMergeHeadRowsExport(true); //创建文件 File file = new File("c:/test.xlsx"); //自定义导出listener,当导出完毕后会回调这个监听 ExportListener l = new ExportListener() { @Override public void delEvent(ExportEvent e) { if(e.getStepName() == ExportEvent.STEP_NAME_ERROR) System.out.println("export has error :" + e.getMessage()); if(e.getRow() != 0 && e.getRow() % 100 == 0) System.out.println("export 100 line."); } @Override public void complete(ExportEvent e) { System.out.println("export has completed."); } }; //文件路径、参数包装类、是否显示控件弹出窗口、监听器, false表示不显示导出提示框,如果需要显示导出提示框可以改为true Excel2007ExportController.export(file.getPath(), wrapper, false, new ExportListener[] {l}); } ``` # 原理 导出实现类com.kingdee.bos.ctrl.kdf.excel.wrapper.SXSSFExportWrapper 可以将实现了com.kingdee.bos.ctrl.kdf.excel.AbstractDataWrapper抽象类的实体导出,目前有三个实现com.kingdee.bos.ctrl.kds.nio.BookDataWrapper(扩展报表包装类),com.kingdee.bos.ctrl.kdf.excel.BookDataWrapper(报表包装类),com.kingdee.bos.ctrl.kdf.export.nio.KDTableDataWrapper(序时簿表格包装类)。

如何调用标准excel导出组件

# 需求如何将报表或是序时簿导出成excel2007格式。# 实现步骤## 报表导出报表导出首先需要获取报表Book对象,可以通过如下代码获取。```...
点击下载文档
确认删除?
回到顶部
客服QQ
  • 客服QQ点击这里给我发消息