问题描述
我一直在使用JasperReports版本6.4.3。我想将Excel标签的颜色显示为红色。
我可以在以上版本中这样做吗?
解决方法
您可以使用net.sf.jasperreports.export.xls.sheet.tab.color报表的属性来更改生成的Excel文件中标签的颜色。
工作示例-使用静态颜色
在此示例中,通过参数传递的基于 Collection 的数据源正在使用。
<?xml version="1.0" encoding="UTF-8"?>
<jasperReport xmlns="http://jasperreports.sourceforge.net/jasperreports" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://jasperreports.sourceforge.net/jasperreports http://jasperreports.sourceforge.net/xsd/jasperreport.xsd" name="Color tabs" pageWidth="290" pageHeight="60" whenNoDataType="AllSectionsNoDetail" columnWidth="290" leftMargin="0" rightMargin="0" topMargin="0" bottomMargin="0">
<property name="com.jaspersoft.studio.data.defaultdataadapter" value="One Empty Record"/>
<property name="net.sf.jasperreports.export.xls.one.page.per.sheet" value="true"/>
<property name="net.sf.jasperreports.export.xls.sheet.tab.color" value="#00FF00"/>
<subDataset name="mainDataset">
<field name="value" class="java.lang.String">
<fieldDescription><![CDATA[_THIS]]></fieldDescription>
</field>
</subDataset>
<parameter name="DATA" class="java.util.Collection" isForPrompting="false">
<defaultValueExpression><![CDATA[Arrays.asList("Row 1","Row 2","Row 3","Row 4","Row 5","Row 6","Row 7","Row 8","Row 9","Row 10")]]></defaultValueExpression>
</parameter>
<title>
<band height="20">
<componentElement>
<reportElement x="0" y="0" width="290" height="20"/>
<jr:list xmlns:jr="http://jasperreports.sourceforge.net/jasperreports/components" xsi:schemaLocation="http://jasperreports.sourceforge.net/jasperreports/components http://jasperreports.sourceforge.net/xsd/components.xsd" printOrder="Vertical">
<datasetRun subDataset="mainDataset">
<dataSourceExpression><![CDATA[new net.sf.jasperreports.engine.data.JRBeanCollectionDataSource($P{DATA})]]></dataSourceExpression>
</datasetRun>
<jr:listContents height="20" width="290">
<textField>
<reportElement x="0" y="0" width="290" height="20"/>
<textFieldExpression><![CDATA[$F{value}]]></textFieldExpression>
</textField>
</jr:listContents>
</jr:list>
</componentElement>
</band>
</title>
</jasperReport>
第一个属性net.sf.jasperreports.export.xls.one.page.per.sheet用于强制 JasperReports 引擎为每个新页面生成新标签。我将报表的大小设置为每页只能显示3行。这意味着该标签只能显示3行。
第二个属性 net.sf.jasperreports.export.xls.sheet.tab.color 用于显示所有红色标签。
生成的结果-使用静态颜色
在 Jaspersoft Studio ( JSS )生成的报告如下:
工作示例-使用动态颜色
我们可以动态更改颜色-在这种情况下,我们可以将表达式用于相同的 net.sf.jasperreports.export.xls.sheet.tab.color 属性。
<?xml version="1.0" encoding="UTF-8"?>
<jasperReport xmlns="http://jasperreports.sourceforge.net/jasperreports" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://jasperreports.sourceforge.net/jasperreports http://jasperreports.sourceforge.net/xsd/jasperreport.xsd" name="Color tabs - Dynamic color" pageWidth="290" pageHeight="60" whenNoDataType="AllSectionsNoDetail" columnWidth="290" leftMargin="0" rightMargin="0" topMargin="0" bottomMargin="0">
<property name="com.jaspersoft.studio.data.defaultdataadapter" value="One Empty Record"/>
<property name="net.sf.jasperreports.export.xls.one.page.per.sheet" value="true"/>
<subDataset name="mainDataset">
<field name="value" class="java.lang.String">
<fieldDescription><![CDATA[_THIS]]></fieldDescription>
</field>
</subDataset>
<parameter name="DATA" class="java.util.Collection" isForPrompting="false">
<defaultValueExpression><![CDATA[Arrays.asList("Row 1","Row 10")]]></defaultValueExpression>
</parameter>
<title>
<band height="20">
<componentElement>
<reportElement x="0" y="0" width="290" height="20"/>
<jr:list xmlns:jr="http://jasperreports.sourceforge.net/jasperreports/components" xsi:schemaLocation="http://jasperreports.sourceforge.net/jasperreports/components http://jasperreports.sourceforge.net/xsd/components.xsd" printOrder="Vertical">
<datasetRun subDataset="mainDataset">
<dataSourceExpression><![CDATA[new net.sf.jasperreports.engine.data.JRBeanCollectionDataSource($P{DATA})]]></dataSourceExpression>
</datasetRun>
<jr:listContents height="20" width="290">
<textField>
<reportElement x="0" y="0" width="220">
<propertyExpression name="net.sf.jasperreports.export.xls.sheet.tab.color"><![CDATA[Arrays.asList("Row 3","Row 6").contains($F{value}) ? "#E50000" : "#00FF00"]]></propertyExpression>
</reportElement>
<textFieldExpression><![CDATA[$F{value}]]></textFieldExpression>
</textField>
</jr:listContents>
</jr:list>
</componentElement>
</band>
</title>
</jasperReport>
在这种情况下,很难更改属性-页面上生成的 last 元素的值用于更改选项卡的颜色。在此示例中,我使用此表达式Arrays.asList("Row 3","Row 6").contains($F{value}) ? "#E50000" : "#00FF00"
来检查每页的第三条(最后一页)记录(字段),并借助最后的 textField s设置颜色。
生成的结果-使用动态颜色
在 JSS 处生成的报告如下:
更多信息
在JasperReports - Advanced Excel Features个样本中可以找到很多样本