Jasper Report用CSV中的科学记数法输出数字

问题描述 投票:0回答:1

我有一个使用bean集合作为数据源的Jasper报告。我有一个Java应用程序,它使用此Jasper报告将一些数据导出到CSV文件。问题是,在导出时,bean集合中定义为BigInteger的某些列以科学计数法显示,并且我没有选择如何使用常规表示法显示它们。

我通过互联网进行调查,包括以下链接:

我没有效用这些步骤:

  1. 将参数net.sf.jasperreports.export.xls.detect.cell.type设置为true
  2. 使用类java.text.DecimalFormat并将格式设置为“0”
  3. 转换(不转换)BigInteger字段到BigDecimal并使用BigDecimal.toPlainString()方法
  4. 将文本字段值设置为="$F{myObject}"
  5. 将字段类型更改为适当的Java类(BigIntegerLong等)

使用这些字段的文本字段定义如下:

<textField isBlankWhenNull="true">
    <reportElement x="2109" y="0" width="90" height="20" uuid="462b3e91-55ec-4250-b90b-e524afd3bb8d"/>
    <textFieldExpression><![CDATA[$F{stSimcard}]]></textFieldExpression>
</textField>

几乎所有这些字段都在报告中声明为String,尽管有些字段被声明为java.math.BigInteger

<field name="stSimcard" class="java.lang.String"/>

对于上述每个步骤:

  1. 将参数net.sf.jasperreports.export.xls.detect.cell.type设置为true

预期值:创建的CSV文件将以正常表示法显示值,即使用Microsoft Excel打开时显示“8956030165644580”

实际值:该值以科学计数法显示,即单元格中的8,956E + 15,但是ih显示公式文本字段中的完整数字,它强制我更改单元格格式以正确显示数字

  1. 使用类java.text.DecimalFormat并将格式设置为“0”:

<textFieldExpression><![CDATA[new java.text.DecimalFormat("0").format($F{stSimcard})]]></textFieldExpression>

预期和实际输出与第一步相同。

  1. 转换(不转换)BigInteger字段到BigDecimal并使用BigDecimal.toPlainString()方法

<textFieldExpression><![CDATA[new java.math.BigDecimal($F{stSimcard}.longValue()).toPlainString()]]></textFieldExpression>

预期和实际输出与第一步相同。

  1. 将文本字段值设置为="$F{myObject}"

<textFieldExpression><![CDATA["=\"" + $F{stSimcard} + "\""]]></textFieldExpression>

预期输出:与第一步相同

实际输出:CSV文件显示='',但不包含字段值。

  1. 将字段类型更改为适当的Java类(BigIntegerLong等) 预期和实际输出与第一步相同。

一些额外的信息:

  • 我不想使用这样的东西,因为我不能显示除字段值之外的东西:

<textFieldExpression><![CDATA["'" + $F{stSimcard}]]></textFieldExpression>

  • 我会理解,如果有人说,唯一的解决方案是在Excel中更改单元格格式。

提前致谢

编辑:报告的数据源定义如下:

Collection<VentasMovil> elementos = new ArrayList<VentasMovil>();

//Filling collection from another collection obtained from database through a Hibernate repository interface

JRDataSource beanCollectionDataSource = new JRBeanCollectionDataSource(elementos);
jasper-reports
1个回答
0
投票

net.sf.jasperreports.export.xls.detect.cell.type - 此属性仅适用于XLS / XLSX导出,因为这些格式保留了丰富的数据格式。

CSV格式非常简单。尝试在记事本中打开CSV:如果可以,则在MS-Excel端发布。 Excel也有数字精度= 15位的limitation

可以通过数据选项卡 - >从文本导入CSV到Excel,然后设置列分隔符,大数字的文本格式等。

© www.soinside.com 2019 - 2024. All rights reserved.