如何使用rowspan正确分组excel数据源?

时间:2016-01-26 07:58:33

标签: excel jasper-reports datasource grouping

根据我的理解,<groupExpression>标记将决定是否创建新组,如果<groupExpression>内的元素发生了更改,则新组将会被创造。

我希望我的报告看起来与我的Excel数据源类似(请参阅下文),因此我想将IDName分组到Excel文件中。在我的jasperReport.jrxml中(参见下文),<groupExpression> Group1是我的Excel文件的ID列。但是,当我预览报告时(请参阅下文),IDName列未分组,而是null字符串。

如何正确分组并消除null字符串?

Excel数据源:

Excel datasource

jasperReport.jrxml

<?xml version="1.0" encoding="UTF-8"?>
<!-- Created with Jaspersoft Studio version 6.2.0.final using JasperReports Library version 6.2.0  -->
<!-- 2016-01-26T15:33:41 -->
<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="FirstJasperReport" pageWidth="595" pageHeight="842" columnWidth="555" leftMargin="20" rightMargin="20" topMargin="20" bottomMargin="20" uuid="8b8832df-588e-4202-826e-a6b3efcbd22b">
    <property name="com.jaspersoft.studio.data.defaultdataadapter" value="ExcelDataBase"/>
    <queryString>
        <![CDATA[]]>
    </queryString>
    <field name="ID" class="java.lang.Integer"/>
    <field name="Name" class="java.lang.String"/>
    <field name="Title" class="java.lang.String"/>
    <field name="Balance" class="java.lang.Integer"/>
    <variable name="Balance1" class="java.lang.Integer" resetType="Group" resetGroup="Group1" calculation="Count">
        <variableExpression><![CDATA[$F{Balance}]]></variableExpression>
    </variable>
    <variable name="Balance2" class="java.lang.Integer" resetType="Group" resetGroup="Group1" calculation="Sum">
        <variableExpression><![CDATA[$F{Balance}]]></variableExpression>
    </variable>
    <group name="Group1">
        <groupExpression><![CDATA[$F{ID}]]></groupExpression>
        <groupHeader>
            <band height="30">
                <rectangle>
                    <reportElement x="0" y="0" width="400" height="30" backcolor="#DEFCF2" uuid="de6c2f8d-afa6-45b4-b40e-574f2e07057e"/>
                </rectangle>
                <textField>
                    <reportElement x="0" y="0" width="100" height="30" uuid="c028645d-9b29-42d3-b91e-d47f15a5b44a"/>
                    <textFieldExpression><![CDATA[$F{ID}]]></textFieldExpression>
                </textField>
                <textField>
                    <reportElement x="100" y="0" width="100" height="30" uuid="85d2844f-ef91-47a1-9223-c6943a25fe4d"/>
                    <textFieldExpression><![CDATA[$F{Name}]]></textFieldExpression>
                </textField>
            </band>
        </groupHeader>
        ......

预览结果:

enter image description here

如何title1title2显示在test1组下,没有null字符串(类似于Excel源文件)?

1 个答案:

答案 0 :(得分:1)

问题是excel数据源正在传递$F{ID}==null作为第二条记录。这会生成null组(您还可以看到namenull)。

最简单的解决方法是在Excel中不使用rowspan (包括Excel工作表中的所有数据)。

如果无法做到这一点,您需要保存第一个$F{ID}值,如果$F{ID}==null

则返回此值

示例

<variable name="First_ID" class="java.lang.Integer" resetType="Group" resetGroup="Group1" calculation="First">
    <variableExpression><![CDATA[$F{ID}]]></variableExpression>
</variable>

如果$V{First_ID}

,则在组返回变量$F{ID}==null
<group name="Group1">
    <groupExpression><![CDATA[$F{ID}==null?$V{First_ID}:$F{ID}]]></groupExpression>
    ... your groupHeader ....
</group>