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

Jasper报表:表组件中的CSV数据源

孙震博
2023-03-14

我有一个要求,我必须阅读CSV文件并在Jasper中准备一份报告。我能够在常规文本字段中使用CSV数据源。但是当我在详细信息或摘要部分添加一个表时,它需要创建一个新的数据集。我成功地创建了它,但是当报告运行时,它无法从CSV数据源获取数据,我得到了一个空白的报告。如果我使用数据库而不是CSV,同样的事情也会发生。Jasper中有bug吗?

共有3个答案

车思淼
2023-03-14

对于表组件,您必须创建新的数据源,您需要做的是拖动一个表组件并单击“新建数据集”,然后从连接/数据源下拉列表中选择CSV数据集。

韦胜泫
2023-03-14

下面是一个示例JRXML,它展示了如何在表组件中使用CSV数据源。

请注意,您需要将子数据集“COLUMN_”中的字段命名为列索引。这样,在JRCsvDataSource#getFieldValue中,您的字段将被正确定位,而不必在CSV文件中为列标题添加行。

    <?xml version="1.0" encoding="UTF-8"?>
<!-- Created with Jaspersoft Studio version 6.3.0.final using JasperReports Library version 6.3.0  -->
<!-- 2016-08-23T13:06:06 -->
<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="SimpleReportWithTable" pageWidth="595" pageHeight="842" whenNoDataType="AllSectionsNoDetail" columnWidth="555" leftMargin="20" rightMargin="20" topMargin="20" bottomMargin="20" uuid="b32b572d-c517-48ba-a44e-3402966e9932">
    <property name="com.jaspersoft.studio.data.defaultdataadapter" value="SimpleCsvDataAdapter"/>
    <style name="Table_TH" mode="Opaque" backcolor="#F0F8FF">
        <box>
            <pen lineWidth="0.5" lineColor="#000000"/>
            <topPen lineWidth="0.5" lineColor="#000000"/>
            <leftPen lineWidth="0.5" lineColor="#000000"/>
            <bottomPen lineWidth="0.5" lineColor="#000000"/>
            <rightPen lineWidth="0.5" lineColor="#000000"/>
        </box>
    </style>
    <style name="Table_CH" mode="Opaque" backcolor="#BFE1FF">
        <box>
            <pen lineWidth="0.5" lineColor="#000000"/>
            <topPen lineWidth="0.5" lineColor="#000000"/>
            <leftPen lineWidth="0.5" lineColor="#000000"/>
            <bottomPen lineWidth="0.5" lineColor="#000000"/>
            <rightPen lineWidth="0.5" lineColor="#000000"/>
        </box>
    </style>
    <style name="Table_TD" mode="Opaque" backcolor="#FFFFFF">
        <box>
            <pen lineWidth="0.5" lineColor="#000000"/>
            <topPen lineWidth="0.5" lineColor="#000000"/>
            <leftPen lineWidth="0.5" lineColor="#000000"/>
            <bottomPen lineWidth="0.5" lineColor="#000000"/>
            <rightPen lineWidth="0.5" lineColor="#000000"/>
        </box>
        <conditionalStyle>
            <conditionExpression><![CDATA[new Boolean($V{REPORT_COUNT}.intValue()%2==0)]]></conditionExpression>
            <style backcolor="#FBFDFF"/>
        </conditionalStyle>
    </style>
    <subDataset name="Dataset1" uuid="76efa803-c263-4538-a39a-8ddb1712e58a">
        <field name="COLUMN_0" class="java.lang.String"/>
        <field name="COLUMN_1" class="java.lang.String"/>
        <field name="COLUMN_2" class="java.lang.String"/>
        <field name="COLUMN_3" class="java.lang.String"/>
        <field name="COLUMN_4" class="java.lang.String"/>
        <field name="COLUMN_5" class="java.lang.String"/>
        <field name="COLUMN_6" class="java.lang.String"/>
        <field name="COLUMN_7" class="java.lang.String"/>
        <field name="COLUMN_8" class="java.lang.String"/>
    </subDataset>
    <parameter name="CSV_DATA_SOURCE" class="net.sf.jasperreports.engine.data.JRCsvDataSource" isForPrompting="false">
        <defaultValueExpression><![CDATA[new net.sf.jasperreports.engine.data.JRCsvDataSource("path_to_csv_file")]]></defaultValueExpression>
    </parameter>
    <summary>
        <band height="70" splitType="Stretch">
            <componentElement>
                <reportElement x="0" y="10" width="200" height="60" uuid="a5c67e1f-1b96-4044-b4d2-ba9da8502bab">
                    <property name="com.jaspersoft.studio.layout" value="com.jaspersoft.studio.editor.layout.VerticalRowLayout"/>
                    <property name="com.jaspersoft.studio.table.style.table_header" value="Table_TH"/>
                    <property name="com.jaspersoft.studio.table.style.column_header" value="Table_CH"/>
                    <property name="com.jaspersoft.studio.table.style.detail" value="Table_TD"/>
                    <property name="net.sf.jasperreports.export.headertoolbar.table.name" value=""/>
                </reportElement>
                <jr:table xmlns:jr="http://jasperreports.sourceforge.net/jasperreports/components" xsi:schemaLocation="http://jasperreports.sourceforge.net/jasperreports/components http://jasperreports.sourceforge.net/xsd/components.xsd" whenNoDataType="AllSectionsNoDetail">
                    <datasetRun subDataset="Dataset1" uuid="7738bf3c-ecda-4864-9804-c6319de53296">
                        <dataSourceExpression><![CDATA[$P{CSV_DATA_SOURCE}]]></dataSourceExpression>
                    </datasetRun>
                    <jr:column width="66" uuid="5c06dacd-68b4-4972-87e9-45dcbf181cbd">
                        <jr:columnHeader style="Table_CH" height="30">
                            <staticText>
                                <reportElement x="0" y="0" width="66" height="30" uuid="3ecb3cf8-02f5-4783-b407-9d36a3b76a9e"/>
                                <text><![CDATA[Row 1]]></text>
                            </staticText>
                        </jr:columnHeader>
                        <jr:detailCell style="Table_TD" height="30">
                            <textField>
                                <reportElement x="0" y="0" width="66" height="30" uuid="21db9e1b-c129-40f6-afd5-c8fc9b939112"/>
                                <textFieldExpression><![CDATA[$F{COLUMN_0}]]></textFieldExpression>
                            </textField>
                        </jr:detailCell>
                    </jr:column>
                    <jr:column width="66" uuid="45989e75-9ad1-4a48-ae63-ddaf380930e7">
                        <jr:columnHeader style="Table_CH" height="30">
                            <staticText>
                                <reportElement x="0" y="0" width="66" height="30" uuid="392ead1f-fd67-431c-8da6-3cf3dad9728d"/>
                                <text><![CDATA[Row 2]]></text>
                            </staticText>
                        </jr:columnHeader>
                        <jr:detailCell style="Table_TD" height="30">
                            <textField>
                                <reportElement x="0" y="0" width="66" height="30" uuid="1a1fb7ba-cec2-44f7-bdc7-3a3887302fb0"/>
                                <textFieldExpression><![CDATA[$F{COLUMN_1}]]></textFieldExpression>
                            </textField>
                        </jr:detailCell>
                    </jr:column>
                    <jr:column width="66" uuid="128a9867-c221-4862-a9ac-f5cc99e394f1">
                        <jr:columnHeader style="Table_CH" height="30">
                            <staticText>
                                <reportElement x="0" y="0" width="66" height="30" uuid="033b57f1-b3dd-4909-8ed7-84c99f92eccd"/>
                                <text><![CDATA[Row 3]]></text>
                            </staticText>
                        </jr:columnHeader>
                        <jr:detailCell style="Table_TD" height="30">
                            <textField>
                                <reportElement x="0" y="0" width="66" height="30" uuid="0d2027c4-e761-4e14-b093-31be3c0493e0"/>
                                <textFieldExpression><![CDATA[$F{COLUMN_2}]]></textFieldExpression>
                            </textField>
                        </jr:detailCell>
                    </jr:column>
                </jr:table>
            </componentElement>
        </band>
    </summary>
</jasperReport>
郜振国
2023-03-14

我也有同样的问题。要修复此问题,请转到表组件,右键单击,然后选择“编辑数据源”,选择“连接数据源表达式”,然后写入:

((net.sf.jasperreports.engine.data.JRCsvDataSource)$P{REPORT_DATA_SOURCE})   
 类似资料:
  • 使用的开发IDE:Jaspersoft Studio 我试图使用下面的表达式将主报表数据源用于表数据集,但没有得到任何数据。 请说明如何将数据源从报表传递到表。我对jasper报告很陌生。样品会很有用。 JRXML: Json数据: 我已经添加了我试图加载的JRXML和Json。当我在数据集中传递dataSourceExpression时,我只得到2行,但在源数据中有3行。请帮我解决这个问题

  • 我使用jasper设计器(不是iReport而是eclipse的插件)创建了一个使用excel文件作为数据源的报表。 该报表在设计器中运行良好,并且从文件中读取数据没有问题,但是在将该文件编译为并在JasperViewer中给出excel文件的路径后,jasperViewer中没有任何内容! 这是我的代码:

  • [更新] 这是一个简化的用例。我们的实际需求是,我们有。RTF文档作为BLOB存储在DB中。我们希望在我们的大报告之间插入这些文档的内容。这些rtf文件包含文本、表格和图像。当我试图读取这个rtf文件时,只有文本出现。有人能提出任何其他的替代方案来实现这一点吗?

  • 你好,在我解释我的问题之前,我会告诉你我想回答什么。 我正在尝试创建一个子报告,显示用户的不同收入。一个用户可以收到多次捐赠,出售了多栋房子/房产,赢得了比赛等。所有这些操作都有更多关于他们收到多少钱、缴纳的税款的详细信息,… 现在,我正在尝试在一个细节中显示用户的详细信息(姓名,姓氏,..;)。这行得通。下一个细节带将用于捐赠。我创建了一个子报表,在其中指定了此部分的布局。但是,此子报表所需的数

  • 我正在用Java Swing和Jasper Report开发一个项目。 }}

  • 因为JasperReport可以将JavaBean集合作为数据源。我们可以用一个引用多个SetCollections的单个对象发送一个SetCollection吗。并使用这些引用传递给编译后的jrxml文件,每次传递不同的setCollection时,都使用对JasPerfillManager.FillReport()的多重调用。我只是想知道编译后的jrxml文件是否会用最后一次调用填充,或者是否