当前位置: 首页 > 知识库问答 >
问题:

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

高宏峻
2023-03-14

我是JasperSoft的新手,当我上传jrxml并尝试在运行Apache Tomcat8的web应用程序上执行它时,我发现在将报表导出到多选项卡(多表)excel文件中存在一些问题。我使用iReport 4.6.0 CE构建此报表,其中使用包含在两个标头组中的两个子报表,并用分页符分隔,以确定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>

也请找到下面我的Java代码的一部分Excel导出

 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)执行相同的报表,它将两个表的数据带入同一个表中(结果是一个excel文件,其中有一个唯一的选项卡,结合了两个子报表的数据提取)。请帮帮我这里缺少的东西。

共有1个答案

谢诚
2023-03-14

我的解决方案是将“IgnoreAgination”设置为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>
 类似资料:
  • 问题内容: 当我运行Spring MVC应用程序时,出现此异常,服务器无法启动。 请帮助我解决此问题。 异常StackTrace: 问题答案: 由于互联网连接不良,jar文件可能已损坏。尝试删除文件夹的内容。然后右键单击您的项目,选择“Maven” ,“ 更新项目” ,然后选中“ 强制更新快照/版本” 。如果您确定只有一个Jar文件有问题,则只需删除其文件夹。

  • 我对斯普林和格拉德尔还不熟悉。我试图在Tomcat服务器上使用Gradle构建来部署Spring应用程序。我能够生成war文件,但我没有web。用于映射servlet的xml文件,我没有映射servlet。我有一个主类和配置类。 那么,为了在tomcat上部署我的应用程序,我需要做什么?我找不到一个合适的端到端文章。我经历了这一切http://docs.spring.io/spring-boot/

  • 我试图在Mac上安装STS,但当我试图运行它时,我得到了这个错误: > OS X版本:Yosemite和10.9(我都试过了) sts版本:3.7.0(在sts网页上提供的最新版本) Java版本: java版本“1.6.0_32”OpenJDK运行时环境(IcedTea6 1.13.4)(RHEL-6.1.13.4.EL7_0-x86_64)OpenJDK 64位服务器VM(构建23.25-B0

  • 我在贾斯珀正面临这个烦人的问题。我已经基于PostgreSQL函数创建了一个报告。当我观看预览时,我对结果没有任何问题。但是,当我发布报告并尝试执行它时,我得到了这个错误: 在贾斯珀,我还能做什么?我只能查询功能,要求任何改变都是一个巨大的官僚问题。 Jasper Studio 6.3.0

  • 我试图构建一个ReactJS应用程序,我希望在tomcat服务器上托管它。我已经使用命令npm run build,构建已经就绪…我在tomcat服务器中的哪里复制这些文件?我是否需要创建另一个应用程序并将其部署到调用React应用程序的服务器上?

  • 主要内容:1- 创建Gradle工程,2- 配置Gradle,3-编辑应用程序结构,项目代码,5- Gradle构建,6-配置以运行应用程序1- 创建Gradle工程 打开 Eclipse ,在菜单中找到 File -> New -> Other…,在打开界面中选择 ,如下图中所示 - 点击下一步(Next),如下图中所示,并继续点击下一步(Next) - 在新打开的界面中输入项目代码的名称,这里我们创建一个名称为 如下图所示- 在新打开界面中,选择 的安装目录,如下图中所示,并继续点击下一步(