猿问

根据条件给单元格上色

我有一个表格,当标题中的单元格和行中的单元格在数据源的某个列表中成对出现时,我必须在其中设置背景颜色。例如:列:“AUD, USD” 行:“BRL, CZK”

在 AUD 列的单元格中,行是 BRL 我检查数据源“AUD-BRL”中的列表中是否存在,如果存在,我需要用绿色着色

现在,我想这样做:列和行将在列表中。我检查了两个列表,然后在这些索引单元格中着色。

这样一来,我将为整个表格提供一个函数,而不必从每个单元格调用函数(总共有 1200 个单元格)。那怎么办?


慕丝7291255
浏览 138回答 2
2回答

慕慕森

如果我正确理解你的问题,你想为表格详细信息行中的所有单元格添加突出显示规则。不幸的是,我认为在 BIRT 中实现这一点有点麻烦。我假设您的表格具有诸如单元格值的 COL_VALUE_1, ..., COL_VALUE_9 和列标题的 COL_TITLE_1, ..., COL_TITLE_9 之类的绑定。此外,我假设有一些在 BIRT 中使用 Javascript 的经验。我这样做的方式是这样的:onCreate对于每个详细信息单元格,我使用如下代码创建一个事件脚本:highlightDetailCell(this, row, 1);... 其中 1 是列号。例如,这是第一列的代码,对于第二列,我将 1 替换为 2,依此类推。可以通过复制和粘贴快速完成此操作。onInitialize接下来,我在报告脚本内的一个函数中实现逻辑,如下所示:function highlightDetailCell(item, row, colnum) {    var colTitle = row["COL_TITLE_" + colnum];    var colValue = row["COL_VALUE_" + colnum];    var highlight = use_your_logic_to_decide(colTitle, colValue);    if (highlight) {        item.get_Style().backgroundColor = "yellow";    }}这是基本的想法。如果要将脚本添加到多个单元格,手动执行此操作可能需要大量工作。事实上,可以highlightDetailCell使用脚本将调用附加到函数(当然,这是 BIRT :-)。您应该阅读文档并修改Design Engine API(简称 DE API)。但请注意,编写和调试这样的脚本可能比添加和编辑单行到 1200 个单元格的驴子工作还要多!我曾经做过的基本上是这样的(在onFactoryreport项目的情况下):// This code is a simplified version that modifies just the first cell,// However it should point you into the right direction.// Some preparationimportPackage(Packages.org.eclipse.birt.report.model.api);var myconfig = reportContext.getReportRunnable().getReportEngine().getConfig();var de = DataEngine.newDataEngine( myconfig, null );var elementFactory = reportContext.getDesignHandle().getElementFactory();// Find the item you want to modify (in my case, a "Grid Item").// Note that for tables, the structure is probably a bit different.// E.G. tables have header, detail and footer rows, // while grids just have rows.var containerGrid = reportContext.getDesignHandle().findElement("Layout MATRIX");// Get the first rowvar row0 = containerGrid.getRows().get(0);// Do something with the first cell (:var cell = row0.getCells().get(0).getContent();cell.setStringProperty("paddingTop", "1pt");cell.setStringProperty("paddingLeft", "1pt");cell.setStringProperty("paddingRight", "1pt");cell.setStringProperty("paddingBottom", "1pt");cell.setStringProperty("borderBottomColor", "#000000");cell.setStringProperty("borderBottomStyle", "solid");cell.setStringProperty("borderBottomWidth", "thin");cell.setStringProperty("borderTopColor", "#000000");cell.setStringProperty("borderTopStyle", "solid");cell.setStringProperty("borderTopWidth", "thin");cell.setStringProperty("borderLeftColor", "#000000");cell.setStringProperty("borderLeftStyle", "solid");cell.setStringProperty("borderLeftWidth", "thin");cell.setStringProperty("borderRightColor", "#000000");cell.setStringProperty("borderRightStyle", "solid");cell.setStringProperty("borderRightWidth", "thin");// When you're finished:de.shutdown( );如果您必须处理合并的单元格,事情会更复杂。您甚至可以向单元格添加内容(我通过这种方式动态创建了整个矩阵)。该脚本并不完全符合您的要求(将脚本添加到每个单元格),但我将其留作练习......保存动态修改的报表设计以在设计器中打开也很有帮助,看看结果:reportContext.getDesignHandle().saveAs("c:/temp/modified_report.rptdesign");HTH

侃侃尔雅

转到要设置格式的单元格(也适用于行或列等元素),在“属性编辑器”上转到“突出显示”并单击“添加...”。您将看到一个对话框,您可以在其中输入突出显示的条件以及在条件为真时要在元素上应用的样式。
随时随地看视频慕课网APP

相关分类

JavaScript
我要回答