Почему при экспорте jrxml в excel числа не имеют числовых значений? - PullRequest
1 голос
/ 07 октября 2019

Я использую отчеты openbravo, и когда я экспортирую отчет в excel, числа внутри него не имеют числового значения, поэтому, когда я выбираю их, чтобы получить сумму, это не работает.

Имеет ли это какое-либо отношение к типу поля, которое я использую в Jaspersoft?

1 Ответ

1 голос
/ 11 октября 2019

Сначала включите, чтобы отчет о яшме обнаружил тип ячейки net.sf.jasperreports.export.xls.detect.cell.type

Теперь результат в Excel зависит от типа, который вы имеете в текстовых полях. Распространенной ошибкой является форматирование числа в текстовых полях

<textField>
     <reportElement x="0" y="0" width="545" height="30" uuid="20cfbb7d-73d5-4d21-bdf4-7e54b2ccf753"/>
    <textFieldExpression><![CDATA[NumberFormat.getInstance().format(1.23d)]]></textFieldExpression>
</textField>

. При этом Number преобразуется в String, и экспорт в Excel не будет работать должным образом.

Вместо правильное решение - использовать шаблон

<textField pattern="#,##0.###;#,##0.###-">
   <reportElement x="0" y="0" width="545" height="30" uuid="20cfbb7d-73d5-4d21-bdf4-7e54b2ccf753"/>
   <textFieldExpression><![CDATA[1.23d]]></textFieldExpression>
</textField>

Таким образом, экспорт может понять, что это число, и знать, какой шаблон следует применять при экспорте в Excel. Вы даже можете настроить шаблон для Excel, используя свойство net.sf.jasperreports.xls.number.pattern.

Небольшой пример, когда Excel определяет число и использует различные шаблоны в экспорте Excel. Я также добавил несколько свойств, чтобы он выглядел как обычный Excel (удаление полей, белый фон и т. Д.).

<?xml version="1.0" encoding="UTF-8"?>
<jasperReport xmlns="http://jasperreports.sourceforge.net/jasperreports" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://jasperreports.sourceforge.net/jasperreports http://jasperreports.sourceforge.net/xsd/jasperreport.xsd" name="TestRewindableDatasource" pageWidth="595" pageHeight="842" whenNoDataType="AllSectionsNoDetail" columnWidth="555" leftMargin="20" rightMargin="20" topMargin="20" bottomMargin="20" uuid="dc03cf06-2828-447a-9238-63e7ca5bc637">
    <property name="net.sf.jasperreports.export.xls.detect.cell.type" value="true"/>
    <property name="net.sf.jasperreports.export.xls.remove.empty.space.between.columns" value="true"/>
    <property name="net.sf.jasperreports.export.xls.remove.empty.space.between.rows" value="true"/>
    <property name="net.sf.jasperreports.export.xls.ignore.cell.background" value="true"/>
    <property name="net.sf.jasperreports.export.xls.ignore.cell.border" value="true"/>
    <property name="net.sf.jasperreports.export.xls.white.page.background" value="false"/>
    <title>
        <band height="20" splitType="Stretch">
            <property name="com.jaspersoft.studio.unit.height" value="px"/>
            <textField pattern="#,##0.00;#,##0.00-">
                <reportElement x="0" y="0" width="260" height="20" uuid="20cfbb7d-73d5-4d21-bdf4-7e54b2ccf753">
                    <property name="net.sf.jasperreports.export.xls.pattern" value="#,##0.#;#,##0.#-"/>
                </reportElement>
                <textElement textAlignment="Right" verticalAlignment="Middle"/>
                <textFieldExpression><![CDATA[10015.231d]]></textFieldExpression>
            </textField>
        </band>
    </title>
</jasperReport>
...