使用JasperReports导出到Excel:如何为列添加AutoFilter

时间:2015-09-16 06:46:08

标签: java jasper-reports export-to-excel autofilter

我使用此代码以MS Excel格式创建报告:

JRXlsExporter exporter = new JRXlsExporter();

从那里我不知道是否可以告诉JasperReports在每一列上应用自动过滤器。

3 个答案:

答案 0 :(得分:1)

我遇到了同样的问题,即在我的电子表格(.xls)中我想为所有列添加自动过滤器(15),所以我添加了一个属性(属性表达式)name = net.sf.jasperreports.export .xls.auto.filter和值为'开始'在第一个列标题和相同的属性,值为最后一个列标题的结尾,它起作用。

答案 1 :(得分:1)

转到'导出器参数'窗格,并确保没有任何'开始'或者'停止'选项设置为自动筛选。在相关列表框中选择空白区域(请参阅附图)。然后再次运行报告。这次你应该在正确的位置看到过滤器。

http://community.jaspersoft.com/jaspersoft-studio/issues/6876

enter image description here

答案 2 :(得分:0)

JasperReports引擎可以为MS Excel输出格式的列应用自动过滤器。要应用自动过滤器,我们必须使用net.sf.jasperreports.export.xls.auto.filter属性。我们应该将此属性应用于标题单元格。可以仅为一列或多列设置过滤器。

工作示例

数据源

我在此示例中使用了csv数据源:

language,framework
Java,Guava
Java,Lombok
Java,JasperReports
Java,Spring
Java,Vaadin
C#,ASP.NET MVC
C#,NancyFX
C#,Automapper
JavaScript,AngularJS
JavaScript,React
JavaScript,jQuery

以下示例中此数据源的数据适配器名称为 frameworks.csv

报告的模板

我使用 Jaspersoft Studio (JSS)来设计报告模板。

<?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="excel_filter" pageWidth="595" pageHeight="842" columnWidth="595" leftMargin="0" rightMargin="0" topMargin="0" bottomMargin="0" uuid="b521f87a-96ed-43bd-80bd-c7b81ef2e8aa">
    <property name="com.jaspersoft.studio.data.defaultdataadapter" value="frameworks.csv"/>
    <queryString>
        <![CDATA[]]>
    </queryString>
    <field name="language" class="java.lang.String"/>
    <field name="framework" class="java.lang.String"/>
    <columnHeader>
        <band height="30" splitType="Stretch">
            <staticText>
                <reportElement x="0" y="0" width="278" height="30" uuid="6b8ba60b-3df3-4c78-a780-79ee493ca5f8">
                    <property name="net.sf.jasperreports.export.xls.auto.filter" value="Start"/>
                </reportElement>
                <textElement textAlignment="Center" verticalAlignment="Middle"/>
                <text><![CDATA[Language]]></text>
            </staticText>
            <staticText>
                <reportElement x="278" y="0" width="277" height="30" uuid="731ba580-2168-49f6-b844-d02549d3d83c">
                    <property name="net.sf.jasperreports.export.xls.auto.filter" value="End"/>
                </reportElement>
                <textElement textAlignment="Center" verticalAlignment="Middle"/>
                <text><![CDATA[Framework]]></text>
            </staticText>
        </band>
    </columnHeader>
    <detail>
        <band height="30" splitType="Stretch">
            <textField>
                <reportElement x="0" y="0" width="278" height="30" uuid="7bf9acec-b13a-4261-91c1-0bf6f2c9c784"/>
                <textFieldExpression><![CDATA[$F{language}]]></textFieldExpression>
            </textField>
            <textField>
                <reportElement x="278" y="0" width="277" height="30" uuid="d15bd48e-77ee-43df-b11f-4ec1a65811c0"/>
                <textFieldExpression><![CDATA[$F{framework}]]></textFieldExpression>
            </textField>
        </band>
    </detail>
</jasperReport>

我使用了细节带来显示数据。对于第一列,我将开始值设置为 net.sf.jasperreports.export.xls.auto.filter 属性列标题区域中的staticText (将是Excel文件中的列标题)和第二个(最后一列)的结束值。

如果仅使用一列的设置属性,则只会创建一个过滤器。

我们可以通过 JSS 中的上下文菜单“XLS标签 - &gt;自动过滤器 - &gt;开始(结束)”轻松设置属性。

enter image description here

输出结果

以MS Excel格式生成的输出文件包含两列的自动过滤器。该文件是在JSS的帮助下生成的。

Filters in MS Excel file

注意:

有关为导出的Excel文件应用不同功能的详细信息,请参阅vendor site