这里有两个问题。第一个比较简单,第二个比较复杂。
1.为什么我的Excel中的交叉表被切断了?
2.如何在运行时根据报表的列数动态调整母版页宽度?
A1:交叉选项卡被切断,因为列宽已手动设置,其中列数将扩展超过母版页的设置宽度。每当您获取报表设计元素并进行调整时,BIRT 都会假设您知道自己在做什么,并且不会覆盖您的设置。
解决方案是重新创建报表元素(表或交叉表),而不是手动调整任何大小。当在 HTML 或 Excel 中运行时,所有列将自动设置为以可用的母版页宽度显示。
BIRT 4.2 交叉表、具有 2 英寸母版页宽度和 30 列的报表项的屏幕截图
A2:这并不容易,我现在不会提供答案。我将指出解决方案并确定一些障碍。此问题的有效解决方案必须包括使用示例数据库的有效解决方案。
(从 BIRT 4.2.1 开始)
挑战1 - 设置母版页宽度BIRT 报告脚本 http://www.eclipse.org/birt/phoenix/deploy/reportScripting.php在报告表或交叉表项目完成之前的事件中。您不能简单地计算报告中有多少列;
如果你想计算列数——
报告设计初始化
columnCount = 0;
交叉表,onCreate
columnCount ++;
在我的研究中,建议有两种路径用于在创建交叉表项之前对列进行计数。任何一个
运行beforeFactory中的数据集(这意味着对数据库进行两次查询,一次用于计数,一次用于报告),然后进行计数并使用它。
计算初始查询中的值并将其收集到数据集中 onFetch。
我遵循使用计算列的数据集 onFetch 选项,但没有使其正常工作。
挑战2 - 母版页的宽度属性必须在报表设计之前或渲染之前设置。 beforeFactory 是最常推荐的。此外,母版页的宽度属性仅在母版页“类型”设置为“自定义”时才可用,在我的尝试中,我在属性编辑器中手动设置此属性General.
将值从 onFetch 传递到 beforeFactory 必须使用 PersistentGlobalVariable 来完成,它只能传递字符串,而不能传递整数。我发现了各种方法都行不通。即使在 PersistentGlobalVariable 中传递“12in”也无法调整母版页宽度
beforeFactory 中的这些代码中的任何一个都会调整母版页宽度(当 Type = Custom 时)
传递价值
reportContext.getReportRunnable().designHandle.getDesignHandle().findMasterPage("Simple MasterPage").setProperty("width","12in");
计算一个值并传递它
increaseWidth = 20;
reportContext.getReportRunnable().designHandle.getDesignHandle().findMasterPage( "Simple MasterPage").setProperty("width",((2+increaseWidth)+"in"));
最后,我无法找到或创建一个功能报告来调整在报告运行时生成的数字列上传递的母版页宽度。我认为这是可能的,但这样做超出了我目前的能力。