【问题标题】:Why is my Crosstab being cut off in Excel?为什么我的交叉表在 Excel 中被截断?
【发布时间】:2012-07-26 15:21:23
【问题描述】:

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

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

我尝试了以下方法:

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

我受到以下方面的限制:

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

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

除了一个博客条目之外,我的 googlefu 让我失望了。任何帮助表示赞赏!谢谢!

【问题讨论】:

  • 我建议在 BIRT 输出的某处上传一个示例文件,您如何在 Excel 中查看它,以及您希望如何查看它,以便我们可以使用一些东西。避免个人/敏感数据并发布查看/下载链接
  • 不幸的是,当我问这个问题时,我已经不在我工作的公司了。如果我是的话,我肯定会这样做。由于我不是,我不再有权访问导致问题的代码或任何结果输出。我相信我们最终使用了任意大宽度的“解决方案”。我不是很满意,但当时效果还不错。
  • 这个问题应该被关闭,通常BIRT会将所有列导出到excel,即使是开箱即用的emmitter。这是关于一份报告中特定问题的一次性问题,其中报告不可用于解决问题。因此,这个问题没有可能的答案。
  • 我想您会发现,对于任何非常宽的报告,某些列将不可见,除非在较新版本的 BIRT 中已修复此问题。注意:数据完全有可能实际存在于文件结构中,但未在 Excel 中正确呈现。我不确定针对这种情况的 SO 政策是什么。我会偶尔检查一下问题的进展,但我不希望有时间用一个例子来更新它。如果它应该关闭,那很好。但是,除非有人给我一个很好的理由,否则我不会关闭它。
  • 这两个 Eclipse 社区论坛帖子以及 Jason Weathersby 的回答提供了根据列数修改母版页宽度的路径。从他们那里创建答案以在此处发布比我现在想要尝试的更多。 eclipse.org/forums/index.php/t/392881eclipse.org/forums/index.php/mv/tree/118884/#page_top

标签: excel overflow birt crosstab


【解决方案1】:

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

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

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

A1:交叉制表符被切断,因为列宽是手动设置的,其中列数将超出母版页的设置宽度。每当您抓住报告设计元素并进行调整时,BIRT 都会假定您知道自己在做什么,并且不会覆盖您的设置。

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

BIRT 4.2 Cross Tab 的屏幕截图,具有 2 英寸母版页宽度和 30 列的报表项

A2:这并不容易,我暂时不会提供答案。我将指出解决方案并确定几个障碍。此问题的有效解决方案必须包括使用示例数据库的有效解决方案。

从 BIRT 4.2.1 开始

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

如果你想计算,列--

报表设计初始化

 columnCount = 0;

跨标签,onCreate

 columnCount ++;

在我的研究中,在创建交叉表项之前建议了两种方法来计算列数。要么

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

  2. 计算初始查询中的值并将其收集到数据集 onFetch 中。

我使用计算列遵循了数据集 onFetch 选项,但没有得到它的工作。

Challenge2 - 母版页的 Width 属性必须在报表设计之前或之前设置,beforeRender。最常推荐使用 beforeFactory。此外,母版页的宽度属性仅在母版页“类型”设置为“自定义”时可用,在我的尝试中,我在属性编辑器常规中手动设置。

将值从 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"));

最后,我无法找到或创建一个功能报表来调整在报表运行时生成的数字列上传递的母版页宽度。我认为这是可能的,但这样做超出了我目前的技能。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2023-04-07
    • 2017-06-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多