2012-07-26 59 views
25

我正在尝试使用BIRT创建一个Excel电子表格。电子表格是一个将两个对象映射在一起的交叉表。根据MySQL数据库中的值,行数和列数是动态的。目前,我有一份PDF输出报告的工作实施。现在,我正在尝试为Excel创建第二个报告版本。为什么我的交叉表在Excel中被切断?

我已经复制了报表设计并开始调整它以使用Excel。一切看起来不错,但只有前3列显示在标题后面。所有行都显示正确。

我曾尝试以下:

  • 我想每个页面上的元素上设置溢出可见。这没有效果。
  • 我试着将母版页的高度和宽度设置为可笑的大值。所有的信息显示正确,但我希望没有硬编码值的解决方案。将来数据宽度可能会再次超过我的任意值并被切断。

我约束在以下几个方面:

  • 我不能切换报告引擎(我不得不使用BIRT)。
  • 我无法切换Excel发射器。

这篇博客提到我的问题: http://www.spudsoft.co.uk/2011/10/the-spudsoft-birt-excel-emitters/ ,但它并没有提供比发射极开关之外的解决方案。具体的引用是“这些文件也有页面布局问题,我无法解决(特别是广泛的报告将被切断)。”

除了一个博客条目我的谷歌失败了我。任何帮助表示赞赏!谢谢!

+1

我会建议上传一个范例文件在BIRT输出的某处,你如何在Excel中看到它,以及你想如何看它,以便我们可以使用某些东西。避免个人/敏感数据并发布视图/下载链接 – Apostolos55 2013-01-02 16:08:16

+0

不幸的是,当我问这个问题时,我不再在我工作的公司。如果是的话,我肯定会这样做。由于我不是,我不再访问导致问题的代码或任何结果输出。 我相信我们最终使用了任意宽度的“解决方案”。我并不是很满意,但当时它运行得很好。 – radicaledward101 2013-01-18 21:14:49

+1

应该关闭这个问题,通常BIRT会将所有列导出为ex​​cel,即使使用开箱即用的发射器。这是一个关于一个报告中的特定问题的单一问题,报告不能用于解决问题。因此,这个问题没有可能的答案。 – 2013-03-06 18:50:10

回答

4

这里有两个问题。第一个比较容易,第二个比较复杂。

1.为什么我的交叉表在Excel中被截断?

2.如何根据运行时报表中的列数动态调整母版页宽度?

A1:由于列宽已被手动设置,其中列数将扩展超过主页面的设置宽度,因此正在切断“交叉”选项卡。无论何时您抓取报告设计元素并进行调整,BIRT都会假定您知道自己在做什么并且不会覆盖您的设置。

解决方案是重新创建报表元素(表或交叉表),而不是手动调整任何大小。在HTML或Excel中运行时,所有列将自动设置为以可用主页面宽度显示。

一个BIRT 4.2交叉表,报告项目

屏幕截图2英寸主页面的宽度和30列

Two Inch by 30 Columns

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

作为BIRT 4.2.1)的

Challenge1 - 母版页宽度在报告即将完成表或交叉表项目之前的事件设置BIRT Report Scripting。您不能简单地统计报告中有多少列;

如果你想算,列 -

报表设计intialize

columnCount = 0; 

交叉表,的onCreate

columnCount ++; 

在我的研究有两条路径建议事先列计数到正在创建的交叉表项目。无论是

  1. 运行数据在beforeFactory设置(这意味着两个查询的数据库,一个数,一个用于报告),然后得到一个数,并使用它。

  2. 计算初始查询中的值并将其收集到数据集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上的功能性报告在报告运行时生成的数字列上传递了宽度。我认为这是可能的,但这样做超出了我目前的技能。

相关问题