我有一个Jasper报告,该报告使用bean集合作为数据源。 我有一个使用该Jasper报告将某些数据导出到CSV文件的Java应用程序。 问题在于,导出时,在bean集合中定义为BigInteger的某些列会以科学计数法显示,而我无法选择如何以正常计数法显示它们。
我通过Internet进行了调查,包括以下链接:
JasperReports: How to format numeric data with Excel exporter
Export to Excel format: cell type "general" and number turn into scientific notation
large number converted to scientific format by default in csv using jasper report
https://community.jaspersoft.com/wiki/excel-export-number-stored-text
我无济于事地遵循了这些步骤:
net.sf.jasperreports.export.xls.detect.cell.type
设置为true java.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 期望值:使用Microsoft Excel打开时,创建的CSV文件应以正常表示法显示该值,即“ 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文件显示='',其中没有字段值。
将字段类型更改为适当的Java类(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);
答案 0 :(得分:0)
net.sf.jasperreports.export。 xls .detect.cell.type-此属性仅适用于XLS / XLSX导出,因为这些格式保留了丰富的数据格式。
CSV是非常简单的格式。尝试在记事本中打开CSV:如果可以,则问题出在MS-Excel一侧。 Excel也具有limitation的数字精度= 15位数字。
可以通过数据标签-> 从文本将CSV导入Excel,然后设置列分隔符,大数字的文本格式等。