Jasper Report экспортирует числа с научными обозначениями в CSV - PullRequest
0 голосов
/ 26 марта 2019

У меня есть отчет Jasper, в котором в качестве источника данных используется коллекция bean-компонентов.У меня есть приложение Java, которое использует этот отчет Jasper для экспорта некоторых данных в файл CSV.Проблема заключается в том, что при экспорте некоторые столбцы, определенные как BigInteger в коллекции bean-компонентов, отображаются с научной нотацией, и у меня нет возможности показать их с нормальной нотацией.

Я исследовал через Интернет, включая следующие ссылки:

И я безрезультатно выполнил эти шаги:

  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 (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"/>

Для каждого из указанных выше шагов:

  1. Установите для параметра 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);

1 Ответ

0 голосов
/ 26 марта 2019

net.sf.jasperreports.export. xls .detect.cell.type - это свойство применимо только для экспорта XLS / XLSX, так как эти форматы поддерживают расширенное форматирование данных.

CSV - довольно простой формат.Попробуйте открыть CSV в блокноте: если все в порядке, тогда проблема лежит на стороне MS-Excel.Также Excel имеет ограничение точности номера = 15 цифр.

Можно импортировать CSV в Excel через вкладку Данные -> Из текста а затем установите разделитель столбцов, текстовый формат для больших чисел и т. д.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...