Birt报表设计器文件导出Excel文件时,不做多个sheet页的设定,如果不做特殊设定,在导出的Excel文件中,系统会自动分成多sheet页。
如果用户的设计器文件高度小于50in,则按用户设定的高度显示数据;否则,则按50的高度分页数据。
Birt4.4支持导出Excel2007格式即xlsx格式文件,该格式文件的好处是能够在一个sheet中存储超过六万条数据,
而Excel2003格式即xls格式若导出大数据会将自动分成多个sheet,这在客户浏览数据时非常不方便。
下面介绍实现单sheet存储所有数据的修改办法:
鼠标点击Table控制,找到table Detail行(用于循环数据的那行,不是汇总或者小计的那行)。然后在master page 属性卡上点击左侧的general,选择custom项,设定其height属性值为一个大的数值。这个值最大限度是13888。
选中表格,点击layout选项卡,选择page break 将 其中的before、after、Inside中的值都设置为Avoid。并且将Page breakInterval的数值填为0。
经过这样的设置,生成的Excel文件就不会自动分sheet页了。
当然程序很多时候并不能把模版写死,可能Excel方式不需要分页显示,但是Pdf方式获知其他的方式需要分页。
这就需要通过api调整参数,动态调整模版里面的参数。
// Open the report design
//design = reportEngine.openReportDesign(rptTemplateUrl);
// Get report body design
SlotHandle slotHandle = design.getDesignHandle().getModuleHandle()
.getSlot(IInternalReportDesignModel.BODY_SLOT);
Iterator<DesignElementHandle> slotIter = slotHandle.iterator();
while (slotIter.hasNext()) {
DesignElementHandle handle = slotIter.next();
if ("Table".equals(handle.getElement().getDefn().getName())) {
handle.setProperty("pageBreakAfter", DesignChoiceConstants.PAGE_BREAK_AFTER_AVOID);
handle.setProperty("pageBreakBefore", DesignChoiceConstants.PAGE_BREAK_BEFORE_AVOID);
handle.setProperty("pageBreakInside", DesignChoiceConstants.PAGE_BREAK_INSIDE_AVOID);
handle.setProperty("pageBreakInterval", 0);
}
}
// 注意:这里面的高度调整,在前面设置了不分页的情况下,没有什么特别的效果,但是Excel高度支持
// 13888,超过这个高度估计也会报错。没有试过
SlotHandle slotMasterPageHandle = design.getDesignHandle().getModuleHandle().getMasterPages();
Iterator<SimpleMasterPageHandle> pageHandleIter = slotMasterPageHandle.iterator();
while (pageHandleIter.hasNext()) {
SimpleMasterPageHandle simpleMasterHandle = pageHandleIter.next();
simpleMasterHandle.setOrientation(DesignChoiceConstants.PAGE_SIZE_CUSTOM);
simpleMasterHandle.setPageType(DesignChoiceConstants.VALUE_FORMAT_TYPE_CUSTOM);
simpleMasterHandle.setProperty("height", "10000in");
}
上面2种方式都可以支持xlsx导出为单sheet.
参考文章:
BIRT4.4导出xlsx文件单sheet 对应百度文库里面的一篇文档。
BIRT4.4.3 底层API