为什么我的交叉表在Excel中被截断?
我正在尝试使用BIRT创build一个Excel电子表格。 电子表格是将两个对象映射在一起的交叉表。 根据MySQL数据库中的值,行数和列数是dynamic的。 目前我有一个PDF输出报告的工作实施。 现在,我正在尝试为Excel创build第二个报告版本。
我已经复制了报表devise,并开始调整它与Excel一起工作。 一切看起来不错,但只有前3列显示在标题后面。 所有行都显示正确。
我已经尝试了以下内容:
- 我试着将页面上的每个元素都设置为“可见”。 这没有效果。
- 我试图设置母版页的高度和宽度,以可笑的大值。 所有的信息显示正确,但我希望没有硬编码值的解决scheme。 将来数据宽度可能会超过我的任意值并被中断。
我受到以下方面的限制:
- 我无法切换报告引擎(我必须使用BIRT)。
- 我无法切换Excel发射器。
此博客条目提到我的问题: http : //www.spudsoft.co.uk/2011/10/the-spudsoft-birt-excel-emitters/但它不提供除发射器开关以外的解决scheme。 具体的引用是“这些文件也有页面布局的问题,我无法解决(特别是广泛的报告将被切断)”。
除了一个博客条目,我的googlefu已经让我失望了。 任何帮助表示赞赏! 谢谢!
这里有两个问题。 第一个比较容易,第二个比较复杂。
1.为什么我的十字标签在Excel中被切断?
2.如何根据运行时报表中的列数dynamic调整主页面宽度?
A1:“交叉”选项卡被截断,因为列宽已被手动设置,其中列数将扩展超过主页面的设置宽度。 每当您抓取报告devise元素并进行调整,BIRT就会假定您知道自己在做什么并且不会覆盖您的设置。
解决scheme是重新创build报表元素(表或交叉表),而不是手动调整任何大小。 在HTML或Excel中运行时,所有列将被自动设置为以可用的主页面宽度显示。
BIRT 4.2交叉表的屏幕截图,带2英寸主页面宽度和30列的报表项目
答:这不容易,我现在不会提供答案。 我将指出解决scheme,并确定一些路障。 此问题的有效解决scheme必须包括使用示例数据库的function解决scheme。
( 从BIRT 4.2.1开始 )
挑战1 – 主页面宽度设置BIRT报告在报表或交叉表项目正在完成之前事件的脚本 。 您不能简单地统计报告中有多less列;
如果你想数,列 –
报告devise初始化
columnCount = 0;
交叉标签,onCreate
columnCount ++;
在我的研究中,有两条pathbuild议在创build交叉表项之前计算列。 或
-
运行beforeFactory中的数据集( 这意味着对数据库有两个查询,一个用于计数,另一个用于报告 ),然后获取计数并使用它。
-
计算初始查询中的值,并在数据集onFetch中收集。
我跟着数据集,onFetch,选项使用计算列,但没有得到它的工作。
挑战2 – 主页面的宽度属性必须设置在报表devisebeforeRender之前或之前。 最经常推荐使用beforeFactory。 此外,主页面的宽度属性仅在主页面“types”设置为“自定义”时可用,在我尝试在“属性编辑器常规”中手动设置此属性时。
将onFetch的值传递给beforeFactory必须使用PersistentGlobalVariable来完成,只能传递string,而不是整数。 我发现各种方式,这不工作。 即使在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"));
最后,我一直无法find或创build一个function报告,调整在报告运行时生成的编号列上传递的主页面宽度。 我认为这是可能的,但这样做超出了我目前的技能。