2

JasperReports以 xls 格式输出文件Excel时,查看时的列仅是 jasper XML 中确定的固定宽度。

当列中的数据具有不同的宽度时,这是一个问题,导致某些列换行。

我查看了APIDTD,似乎没有办法将列宽设置为自动调整。

即而不是显示为

  邮箱地址
  @email.com

展示为

  电子邮件地址@email.com

有可能做到这一点吗?

这个问题类似于Jasper 报告列宽

4

1 回答 1

2

我们可以借助net.sf.jasperreports.export.xls.auto.fit.column属性来实现自动列宽的效果。如果我们将该值设置为true,则将启用自动宽度。此属性的默认值为false

工作样本

我们可以使用Jaspersoft Studio中设计的csv数据源和简单报告来检查结果。

报告的设计将很简单 -详细信息带中只有一个文本字段。

数据源

这很简单——只有一栏电子邮件。第一行只包含一列的名称。我们可以告诉数据源适配器跳过第一行。

email
emailAdress@email.com
short@have.org
a@b.net

报告模板

textField的宽度将太小而无法显示全文。

“打开”自动宽度,我们应该设置net.sf.jasperreports.export.xls.auto.fit.column属性。

jrxml将是:

<?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="test_auto_width_excel" pageWidth="100" pageHeight="842" columnWidth="100" leftMargin="0" rightMargin="0" topMargin="0" bottomMargin="0" uuid="c899fa54-7405-4371-b34f-429f5959b593">
    <queryString language="csv">
        <![CDATA[]]>
    </queryString>
    <field name="email" class="java.lang.String"/>
    <detail>
        <band height="30" splitType="Stretch">
            <textField>
                <reportElement x="0" y="0" width="100" height="30" uuid="04d0735d-a1b6-4a8f-b252-b8772d7c5abd">
                    <property name="net.sf.jasperreports.export.xls.auto.fit.column" value="true"/>
                </reportElement>
                <textFieldExpression><![CDATA[$F{email}]]></textFieldExpression>
            </textField>
        </band>
    </detail>
</jasperReport>

输出结果

不使用属性生成的xls文件如下所示(在MS Excel中打开):

在此处输入图像描述

生成的带有net.sf.jasperreports.export.xls.auto.fit.column属性的xls文件如下所示(在MS Excel中打开):

在此处输入图像描述


笔记

于 2016-07-06T22:01:32.763 回答