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

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

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

如何正确地将它们分组并消除nullstring?

Excel数据源:

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 ,不含nullstring(类似于Excel源文件)?

问题是,Excel数据源传递$F{ID}==null为第二条logging。 这将生成null组(正如您可以看到namenull )。

解决这个问题的最简单的方法是不要在excel中使用rowspan (包括excel表单中的所有数据)。

如果这是不可能的,则需要保存第一个$F{ID}值,如果$F{ID}==null则返回此$F{ID}==null

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

如果$F{ID}==null则返回variables$V{First_ID}

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