У меня есть отчет Jasper, в котором в качестве источника данных используется коллекция bean-компонентов.У меня есть приложение Java, которое использует этот отчет Jasper для экспорта некоторых данных в файл CSV.Проблема заключается в том, что при экспорте некоторые столбцы, определенные как BigInteger в коллекции bean-компонентов, отображаются с научной нотацией, и у меня нет возможности показать их с нормальной нотацией.
Я исследовал через Интернет, включая следующие ссылки:
И я безрезультатно выполнил эти шаги:
- Установите для параметра
net.sf.jasperreports.export.xls.detect.cell.type
значение true - . Используйте класс
java.text.DecimalFormat
и установите формат в "0" - . Преобразуйте (без приведения) поле
BigInteger
в BigDecimal
и используйтеметод BigDecimal.toPlainString()
- Установите значение текстового поля на
="$F{myObject}"
- Изменен тип поля на правильный класс Java (
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
, alхотя некоторые из них объявлены как java.math.BigInteger
:
<field name="stSimcard" class="java.lang.String"/>
Для каждого из указанных выше шагов:
- Установите для параметра
net.sf.jasperreports.export.xls.detect.cell.type
значение true
Ожидаемое значение: созданный файл CSV должен отображать значение в обычной записи, т. Е. "8956030165644580" при открытии в Microsoft Excel
Фактическое значение: значение отображается в научной записит.е. 8 956 E + 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>
- Я пойму, если некоторые из вас скажут, что единственным решением является изменение формата ячейки в 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);