在 Tomcat 应用程序服务器上执行时无法创建 multi-sheet excel jasper 报告
Unable to create a multi-sheet excel jasper report when executed on a Tomcat application server
我是 JasperSoft 的新手,当我上传 jrxml 和尝试在 运行 使用 Apache Tomcat 8 的 Web 应用程序上执行它。
我使用 iReport 4.6.0 CE 构建此报告,其中我使用包含在两个标题组中的两个子报告,用分页符分隔以确定 excel 文件的第一个选项卡的结尾和第二个选项卡的开头。
当我使用 iReport 运行 这份报告时,我首先得到了我想要的结果
但是,当我 运行 Web 应用程序上的相同报告时,我从同一选项卡下的两个子报告中获取所有数据。
任何 body 可以帮助我吗?
这是我的主要报告 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 个子报表和包含 them.This 可能不是一个稳定的解决方案,但知道它很有魅力。
<?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>
我是 JasperSoft 的新手,当我上传 jrxml 和尝试在 运行 使用 Apache Tomcat 8 的 Web 应用程序上执行它。 我使用 iReport 4.6.0 CE 构建此报告,其中我使用包含在两个标题组中的两个子报告,用分页符分隔以确定 excel 文件的第一个选项卡的结尾和第二个选项卡的开头。 当我使用 iReport 运行 这份报告时,我首先得到了我想要的结果 但是,当我 运行 Web 应用程序上的相同报告时,我从同一选项卡下的两个子报告中获取所有数据。 任何 body 可以帮助我吗?
这是我的主要报告 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 个子报表和包含 them.This 可能不是一个稳定的解决方案,但知道它很有魅力。
<?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>