我是 JasperSoft 的新手,当我上传 jrxml 并尝试在使用 Apache Tomcat 8 运行的 Web 应用程序上执行它时,我发现将报告导出到多选项卡(多工作表)Excel 文件时出现问题。 我使用 iReport 4.6.0 CE 来构建此报告,其中使用包含在两个 header 组中的两个子报告(以分页符分隔)来确定 excel 文件的第一个选项卡的结尾和第二个选项卡的开头。 当我使用 iReport 运行此报告时,我首先得到了我想要的结果 但是,当我在 Web 应用程序上运行相同的报告时,我从同一选项卡下的两个子报告中获取所有数据。 有人可以帮助我吗?
这是我的主要报告 xml 代码
<?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="reportGlobalDOD" language="groovy" pageWidth="1310" pageHeight="842" columnWidth="1270" leftMargin="20" rightMargin="20" topMargin="20" bottomMargin="20" isIgnorePagination="true" uuid="3eb83bbf-8ce6-4d69-b25a-288780da1894">
<property name="net.sf.jasperreports.export.xls.one.page.per.sheet" value="true"/>
<property name="ireport.zoom" value="0.75"/>
<property name="ireport.x" value="0"/>
<property name="ireport.y" value="0"/>
<property name="net.sf.jasperreports.export.xls.sheet.names.1" value="Broker"/>
<property name="net.sf.jasperreports.page.break.no.pagination" value="apply"/>
<property name="net.sf.jasperreports.export.xls.sheet.names.2" value="PMA"/>
<parameter name="EffDate" class="java.util.Date">
<defaultValueExpression><![CDATA[]]></defaultValueExpression>
</parameter>
<parameter name="SUBREPORT_DIR" class="java.lang.String" isForPrompting="false">
<defaultValueExpression><![CDATA[]]></defaultValueExpression>
</parameter>
<queryString>
<![CDATA[SET LANGUAGE ENGLISH;
Declare @CurrentDay smalldatetime = NULL
select @CurrentDay =$P{EffDate}
select @CurrentDay as effective_date]]>
</queryString>
<field name="effective_date" class="java.sql.Timestamp"/>
<group name="subreport1">
<groupExpression><![CDATA[dummy1]]></groupExpression>
<groupHeader>
<band height="152">
<subreport>
<reportElement uuid="22345c46-948d-435f-99de-dbec39e586e2" x="-20" y="0" width="1310" height="134"/>
<subreportParameter name="EffDate">
<subreportParameterExpression><![CDATA[$P{EffDate}]]></subreportParameterExpression>
</subreportParameter>
<connectionExpression><![CDATA[$P{REPORT_CONNECTION}]]></connectionExpression>
<subreportExpression><![CDATA[$P{SUBREPORT_DIR} + "/BrokerDayOverDayReconciliation.jasper"]]></subreportExpression>
</subreport>
<break>
<reportElement uuid="c23c613d-444f-4b61-84f2-ee14d39df15c" x="0" y="140" width="100" height="1"/>
</break>
</band>
</groupHeader>
</group>
<group name="subreport2">
<groupExpression><![CDATA[dummy1]]></groupExpression>
<groupHeader>
<band height="115">
<subreport>
<reportElement uuid="1a03a62a-4372-4a42-8910-bd8e79cfb318" x="-20" y="0" width="1310" height="115"/>
<subreportParameter name="EffDate">
<subreportParameterExpression><![CDATA[$P{EffDate}]]></subreportParameterExpression>
</subreportParameter>
<connectionExpression><![CDATA[$P{REPORT_CONNECTION}]]></connectionExpression>
<subreportExpression><![CDATA[$P{SUBREPORT_DIR} + "/PMADayOverDayReconciliation.jasper"]]></subreportExpression>
</subreport>
</band>
</groupHeader>
</group>
</jasperReport>
PS:我在构建此报告时使用了与我的所有相关或类似的问题,并且正如所示,它在本地使用 iReport 工作,但当我尝试在 Web 应用程序上运行报告时却不起作用
另请在下面找到我的 Excel 导出的 Java 代码部分
JRXlsExporter exporterXLS = new JRXlsExporter();
exporterXLS.setParameter(JRXlsExporterParameter.JASPER_PRINT, jasperPrint);
exporterXLS.setParameter(JRXlsExporterParameter.OUTPUT_STREAM, outputByte);
exporterXLS.setParameter(JRXlsExporterParameter.IS_ONE_PAGE_PER_SHEET, Boolean.TRUE);
// exporterXLS.setParameter(JRXlsExporterParameter.IS_AUTO_DETECT_CELL_TYPE, Boolean.TRUE);
exporterXLS.setParameter(JRXlsExporterParameter.IS_WHITE_PAGE_BACKGROUND, Boolean.FALSE);
exporterXLS.setParameter(JRXlsExporterParameter.IS_REMOVE_EMPTY_SPACE_BETWEEN_ROWS, Boolean.TRUE);
exporterXLS.setParameter(JRXlsExporterParameter.IS_REMOVE_EMPTY_SPACE_BETWEEN_COLUMNS, Boolean.TRUE);
exporterXLS.setParameter(JExcelApiExporterParameter.IS_DETECT_CELL_TYPE,Boolean.TRUE);
exporterXLS.exportReport();
此外,我尝试使用较新版本的 ireport(特别是 5.0.0)执行相同的报告,它将 2 个工作表数据放入同一个工作表中(结果是一个 excel 文件,其中包含一个结合了 2 个子报告数据提取的独特选项卡)。请帮助我这里缺少什么。
最佳答案
我的解决方案是将“ignorePagination”设置为 false(我知道这可能会导致一些问题,因为它可能会创建比想要的更多的工作表)并增加 2 个子报表以及包含它们的两个带区的高度。这可能不是一个稳定的解决方案,但要知道它正在发挥作用。
<?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="reportGlobalDOD" language="groovy" pageWidth="1600" pageHeight="15000" columnWidth="1560" leftMargin="20" rightMargin="20" topMargin="20" bottomMargin="20" uuid="3eb83bbf-8ce6-4d69-b25a-288780da1894">
<property name="net.sf.jasperreports.export.xls.one.page.per.sheet" value="true"/>
<property name="net.sf.jasperreports.page.break.no.pagination" value="apply"/>
<property name="ireport.zoom" value="0.75"/>
<property name="ireport.x" value="0"/>
<property name="ireport.y" value="0"/>
<property name="net.sf.jasperreports.export.xls.sheet.names.1" value="Broker"/>
<property name="net.sf.jasperreports.export.xls.sheet.names.2" value="PMA"/>
<parameter name="EffDate" class="java.util.Date">
<defaultValueExpression><![CDATA[]]></defaultValueExpression>
</parameter>
<parameter name="SUBREPORT_DIR" class="java.lang.String" isForPrompting="false">
<defaultValueExpression><![CDATA["C:\\Users\\user1\\Documents\\Reports\\"]]></defaultValueExpression>
</parameter>
<queryString>
<![CDATA[SET LANGUAGE ENGLISH;
Declare @CurrentDay smalldatetime = NULL
select @CurrentDay =$P{EffDate}
select @CurrentDay as effective_date]]>
</queryString>
<field name="effective_date" class="java.sql.Timestamp"/>
<group name="subreport1" isStartNewPage="true">
<groupExpression><![CDATA[dummy1]]></groupExpression>
<groupHeader>
<band height="300">
<subreport isUsingCache="false" runToBottom="false">
<reportElement uuid="22345c46-948d-435f-99de-dbec39e586e2" x="-20" y="0" width="1599" height="299"/>
<subreportParameter name="EffDate">
<subreportParameterExpression><![CDATA[$P{EffDate}]]></subreportParameterExpression>
</subreportParameter>
<connectionExpression><![CDATA[$P{REPORT_CONNECTION}]]></connectionExpression>
<subreportExpression><![CDATA[$P{SUBREPORT_DIR} + "/BrokerDayOverDayReconciliation.jasper"]]></subreportExpression>
</subreport>
<break>
<reportElement uuid="c23c613d-444f-4b61-84f2-ee14d39df15c" x="0" y="299" width="138" height="1">
<property name="net.sf.jasperreports.export.xls.break.after.row" value="true"/>
</reportElement>
</break>
</band>
</groupHeader>
</group>
<group name="subreport2" isStartNewPage="true">
<groupExpression><![CDATA[dummy1]]></groupExpression>
<groupHeader>
<band height="300">
<break>
<reportElement uuid="81337467-5a85-43e4-a23a-ba567317e3ce" x="0" y="0" width="100" height="1">
<property name="net.sf.jasperreports.export.xls.break.before.row" value="true"/>
</reportElement>
</break>
<subreport>
<reportElement uuid="1a03a62a-4372-4a42-8910-bd8e79cfb318" x="-20" y="1" width="1599" height="299"/>
<subreportParameter name="EffDate">
<subreportParameterExpression><![CDATA[$P{EffDate}]]></subreportParameterExpression>
</subreportParameter>
<connectionExpression><![CDATA[$P{REPORT_CONNECTION}]]></connectionExpression>
<subreportExpression><![CDATA[$P{SUBREPORT_DIR} + "/PMADayOverDayReconciliation.jasper"]]></subreportExpression>
</subreport>
</band>
</groupHeader>
</group>
</jasperReport>
关于java - 在 Tomcat 应用程序服务器上执行时无法创建多表 excel jasper 报告,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39456192/