繁体   English   中英

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

[英]JasperReports export to Excel uses only last set background color

我对 Dynamic-Jasper 非常陌生,但由于工作原因,我不得不向我们已经实施的解决方案添加一个新功能。

我的问题

目标是将一个列添加到仅包含基于某些信息的背景颜色的报告中。 我设法做到了,但在测试时我偶然发现了一个问题。 虽然我在 html 和 pdf 视图中的所有列都具有正确的颜色,但 Excel 仅使用最后一种颜色为字段着色。

在调试时我注意到,相同颜色的字段具有相同的模板 ID,但是虽然所有视图都运行大部分相同的代码,但 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));
                   }
         }
}

html视图

Excel 视图

临时结论

相同的样式在后台使用相同的对象,而 JR-Excel 导出通过将相同的对象分配给我在那里操作的所有字段来搞砸。 如果有人知道我的错误或潜在的解决方案来改变不同的东西以产生同样的结果,请告诉我。

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

编辑

我们正在使用 JasperReports 6.7.1

我找到了一个解决方案,我用一个看起来完全一样的新模板替换了每个模板。 这样每个 Field 都有自己的 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);

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM