java - 在 Tomcat 应用程序服务器上执行时无法创建多表 excel jasper 报告

标签 java jasper-reports export-to-excel

我是 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/

相关文章:

java - 自动装箱和泛型

c# - 将日期导出到 Csv 并告诉 excel 格式

Python openpyxl 模块说 : AttributeError: 'tuple' object has no attribute 'upper'

jasper-reports - Jaspersoft Studio 在为报告更改数据适配器时添加 uuid

jasper-reports - isIgnorePagination时如何拆分到新页面?

reporting-services - 从SSRS导出时如何获取命名的Excel工作表

java - 如何在应用程序引擎上生成类似民意调查ID的涂鸦?

java.lang.UnsatisfiedLinkError : org. opencv.core.Mat.n_Mat(III)J吗?

java - 如何为 Web 服务创建连接池

java - 将 JasperReport 导出为 PDF 输出流?