如何解决根据条件的颜色单元
我有一个表,当标题中的单元格和行中的单元格成对出现在数据源的某个列表中时,我必须设置背景色。 例如: 栏:“澳元,美元” 行:“ BRL,CZK”
在AUD列和行的单元格为BRL中,我检查数据源“ AUD-BRL”中的列表中是否存在,如果需要,我需要将颜色涂成绿色
现在,我想这样做: 列和行将在列表中。 我浏览了两个列表,然后在这些索引中为单元格上色。
这样我就对整个表只有一个函数,而不必从每个单元格调用函数(总共有1200个单元格)。 该怎么办?
解决方法
转到要设置格式的单元格(也适用于行或列之类的元素),在“属性编辑器”上转到“突出显示”,然后单击“添加...”。您将看到一个对话框,您可以在其中输入突出显示的条件,以及在条件为true时要应用于元素的样式。
,Fede MG的答案是正确的。
如果我正确理解了您的问题,则要向表详细信息行中的所有单元格添加突出显示规则。不幸的是,我认为在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,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个单元格添加和编辑单行代码的驴工作还要复杂得多!
我曾经做的基本上是这样的(在报告项目的onFactory
事件中):
// This code is a simplified version that modifies just the first cell,// However it should point you into the right direction.
// Some preparation
importPackage(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 row
var 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
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。