如何调用标准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对象,可以通过如下代码获取。```...
点击下载文档
上一篇:EAS8.8高级图表控件下一篇:如何改变表格内容选择模式
本文2024-09-22 20:37:22发表“eas cloud知识”栏目。
本文链接:https://wenku.my7c.com/article/kingdee-eas-114831.html
您需要登录后才可以发表评论, 登录登录 或者 注册
最新文档
热门文章