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

How to group properly excel data source with rowspan?

根据我的理解,<groupExpression> 标签将决定是否创建一个新组,如果 <groupExpression> 中的元素发生变化,则会创建一个新组创建。

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

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

Excel 数据源:

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>
        ......

预览结果:

如何让title1title2出现在组test1下,而不需要null字符串(类似于Excel源文件)?

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

最简单的修复方法是不在excel中使用rowspan(包括excelsheet中的所有数据)。

如果这不可能,您需要保存第一个 $F{ID} 值和 return 如果 $F{ID}==null

例子

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

组return变量$V{First_ID}if$F{ID}==null

<group name="Group1">
    <groupExpression><![CDATA[$F{ID}==null?$V{First_ID}:$F{ID}]]></groupExpression>
    ... your groupHeader ....
</group>