为什么我的交叉表在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列的报表项目

两英寸乘30列

答:这不容易,我现在不会提供答案。 我将指出解决scheme,并确定一些路障。 此问题的有效解决scheme必须包括使用示例数据库的function解决scheme。

从BIRT 4.2.1开始

挑战1 – 主页面宽度设置BIRT报告在报表或交叉表项目正在完成之前事件的脚本 。 您不能简单地统计报告中有多less列;

如果你想数,列 –

报告devise初始化

columnCount = 0; 

交叉标签,onCreate

  columnCount ++; 

在我的研究中,有两条pathbuild议在创build交叉表项之前计算列。 或

  1. 运行beforeFactory中的数据集( 这意味着对数据库有两个查询,一个用于计数,另一个用于报告 ),然后获取计数并使用它。

  2. 计算初始查询中的值,并在数据集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报告,调整在报告运行时生成的编号列上传递的主页面宽度。 我认为这是可能的,但这样做超出了我目前的技能。