我有一个使用bean集合作为数据源的Jasper报告。我有一个Java应用程序,它使用此Jasper报告将一些数据导出到CSV文件。问题是,在导出时,bean集合中定义为BigInteger的某些列以科学计数法显示,并且我没有选择如何使用常规表示法显示它们。
我通过互联网进行调查,包括以下链接:
我没有效用这些步骤:
net.sf.jasperreports.export.xls.detect.cell.type
设置为truejava.text.DecimalFormat
并将格式设置为“0”BigInteger
字段到BigDecimal
并使用BigDecimal.toPlainString()
方法="$F{myObject}"
BigInteger
,Long
等)使用这些字段的文本字段定义如下:
<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"/>
对于上述每个步骤:
net.sf.jasperreports.export.xls.detect.cell.type
设置为true预期值:创建的CSV文件将以正常表示法显示值,即使用Microsoft Excel打开时显示“8956030165644580”
实际值:该值以科学计数法显示,即单元格中的8,956E + 15,但是ih显示公式文本字段中的完整数字,它强制我更改单元格格式以正确显示数字
java.text.DecimalFormat
并将格式设置为“0”:<textFieldExpression><![CDATA[new java.text.DecimalFormat("0").format($F{stSimcard})]]></textFieldExpression>
预期和实际输出与第一步相同。
BigInteger
字段到BigDecimal
并使用BigDecimal.toPlainString()
方法<textFieldExpression><![CDATA[new java.math.BigDecimal($F{stSimcard}.longValue()).toPlainString()]]></textFieldExpression>
预期和实际输出与第一步相同。
="$F{myObject}"
<textFieldExpression><![CDATA["=\"" + $F{stSimcard} + "\""]]></textFieldExpression>
预期输出:与第一步相同
实际输出:CSV文件显示='',但不包含字段值。
BigInteger
,Long
等)
预期和实际输出与第一步相同。一些额外的信息:
<textFieldExpression><![CDATA["'" + $F{stSimcard}]]></textFieldExpression>
提前致谢
编辑:报告的数据源定义如下:
Collection<VentasMovil> elementos = new ArrayList<VentasMovil>();
//Filling collection from another collection obtained from database through a Hibernate repository interface
JRDataSource beanCollectionDataSource = new JRBeanCollectionDataSource(elementos);
net.sf.jasperreports.export.xls.detect.cell.type - 此属性仅适用于XLS / XLSX导出,因为这些格式保留了丰富的数据格式。
CSV格式非常简单。尝试在记事本中打开CSV:如果可以,则在MS-Excel端发布。 Excel也有数字精度= 15位的limitation。
可以通过数据选项卡 - >从文本导入CSV到Excel,然后设置列分隔符,大数字的文本格式等。