可以在生成的Excel文件中设置工作表标签的颜色吗? 工作示例-使用静态颜色生成的结果-使用静态颜色工作示例-使用动态颜色生成的结果-使用动态颜色更多信息

问题描述

我一直在使用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 )生成的报告如下:

Output generated at JSS - static color case

工作示例-使用动态颜色

我们可以动态更改颜色-在这种情况下,我们可以将表达式用于相同的 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 处生成的报告如下:

Output generated at JSS - dynamic color case

更多信息

JasperReports - Advanced Excel Features个样本中可以找到很多样本

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...