JasperReports导出到Excel仅使用最后设置的背景色

问题描述 投票:0回答:1

对于Dynamic-Jasper来说还很陌生,但是由于工作原因,我不得不向我们已经实施的解决方案中添加新功能。

我的问题

目标是向基于某些信息仅由背景色组成的报表中添加一列。我设法做到了,但是在测试时偶然发现了一个问题。当我在html和pdf视图中的所有列都具有正确的颜色时,Excel只能为最后一个颜色中的字段着色。

虽然我注意到调试,但是相同颜色的字段具有相同的templateId,但是尽管所有视图都通过相同的代码运行,但Excel的行为却有所不同,并且在所有字段中都具有相同的ID。

我在其中操作模板的代码

for(JRPrintElement elemt : jasperPrint.getPages().get(0).getElements()) {
         if(elemt instanceof JRTemplatePrintText) {
                   JRTemplatePrintText text = (JRTemplatePrintText) elemt;
                   (...)
                   if (text.getFullText().startsWith("COLOR_IDENTIFIER")) {
                            String marker = text.getFullText().substring(text.getFullText().indexOf('#') + 1);
                            text.setText("ID = " + ((JRTemplatePrintText) elemt).getTemplate().getId());
                            int rgb = TypeConverter.string2int(Integer.parseInt(marker, 16) + "", 0);
                            ((JRTemplatePrintText) elemt).getTemplate().setBackcolor(new Color(rgb));
                   }
         }
}

The html view

The Excel view

临时结论

相同的样式在后台使用相同的对象,并且通过将相同的对象分配给我在此处操作过的所有字段,JR-Excel导出使某些事情变得混乱。如果有人知道我的错失或可能的解决方案,要更改一些不同的东西以产生相同的结果,请告诉我。

我之前尝试过的另一种尝试是尝试在Jasper调用的评估方法中设置字段。在这种方法中,我们分配每个字段的文本值。它包含一个带有JRFillFields的地图,但是不幸的是Map-Implementation拒绝访问它们,只是重新调整了它们的价值。该地图由dj提供,无法与其他地图切换。

编辑

我们正在使用JasperReports 6.7.1

java jasper-reports export-to-excel
1个回答
0
投票

我找到了解决方案,在这里我用一个看起来完全一样的新模板替换了每个模板。这样,每个字段都有自己的ID保证,而且JasperReports如何处理其内部数据也不是偶然。

JRTemplateElement custom = 
   new JRTemplateText(((JRTemplatePrintText) elemt).getTemplate().getOrigin(), 
   ((JRTemplatePrintText) elemt).getTemplate().getDefaultStyleProvider());
custom.setBackcolor(new Color(rgb));
custom.setStyle(((JRTemplatePrintText) elemt).getTemplate().getStyle());
((JRTemplatePrintText) elemt).setTemplate(custom);
© www.soinside.com 2019 - 2024. All rights reserved.