这里有两个问题。第一个比较容易,第二个比较复杂。
1.为什么我的交叉表在Excel中被截断?
2.如何根据运行时报表中的列数动态调整母版页宽度?
A1:由于列宽已被手动设置,其中列数将扩展超过主页面的设置宽度,因此正在切断“交叉”选项卡。无论何时您抓取报告设计元素并进行调整,BIRT都会假定您知道自己在做什么并且不会覆盖您的设置。
解决方案是重新创建报表元素(表或交叉表),而不是手动调整任何大小。在HTML或Excel中运行时,所有列将自动设置为以可用主页面宽度显示。
一个BIRT 4.2交叉表,报告项目
屏幕截图2英寸主页面的宽度和30列
A2:这是不容易的,在我将不提供答案这次。我将指出解决方案并确定一些路障。此问题的有效解决方案必须包括使用示例数据库的功能解决方案。
(作为BIRT 4.2.1)的
Challenge1 - 母版页宽度在报告即将完成表或交叉表项目之前的事件设置BIRT Report Scripting。您不能简单地统计报告中有多少列;
如果你想算,列 -
报表设计intialize
columnCount = 0;
交叉表,的onCreate
columnCount ++;
在我的研究有两条路径建议事先列计数到正在创建的交叉表项目。无论是
运行数据在beforeFactory设置(这意味着两个查询的数据库,一个数,一个用于报告),然后得到一个数,并使用它。
计算初始查询中的值并将其收集到数据集onFetch中。
我跟着数据集,onFetch,选项使用计算列,但没有得到它的工作。
挑战2 - 主页面的宽度属性必须设置在Report Design或beforeRender之前或之前。最常推荐使用beforeFactory。此外,主页面的宽度属性仅在主页面“类型”设置为“自定义”时可用,我尝试在属性编辑器通用中手动设置此属性。
传递从onFetch到beforeFactory的值必须使用PersistentGlobalVariable来完成,该PersistentGlobalVariable只能传递字符串,而不是整数。我发现各种方式,这不工作。即使是通过“12英寸”在PersistentGlobalVariable未能及时调整母版页宽
无论是在beforeFactory这些代码将调整主页宽(当类型=自定义)
传递值
reportContext.getReportRunnable().designHandle.getDesignHandle().findMasterPage("Simple MasterPage").setProperty("width","12in");
计算一个值,并将它传递
increaseWidth = 20;
reportContext.getReportRunnable().designHandle.getDesignHandle().findMasterPage("Simple MasterPage").setProperty("width",((2+increaseWidth)+"in"));
最后,我一直无法找到或创建一个调整母版页W上的功能性报告在报告运行时生成的数字列上传递了宽度。我认为这是可能的,但这样做超出了我目前的技能。
我会建议上传一个范例文件在BIRT输出的某处,你如何在Excel中看到它,以及你想如何看它,以便我们可以使用某些东西。避免个人/敏感数据并发布视图/下载链接 – Apostolos55 2013-01-02 16:08:16
不幸的是,当我问这个问题时,我不再在我工作的公司。如果是的话,我肯定会这样做。由于我不是,我不再访问导致问题的代码或任何结果输出。 我相信我们最终使用了任意宽度的“解决方案”。我并不是很满意,但当时它运行得很好。 – radicaledward101 2013-01-18 21:14:49
应该关闭这个问题,通常BIRT会将所有列导出为excel,即使使用开箱即用的发射器。这是一个关于一个报告中的特定问题的单一问题,报告不能用于解决问题。因此,这个问题没有可能的答案。 – 2013-03-06 18:50:10