将 jrxml 导出到 excel 时,为什么数字没有数值?
When exporting a jrxml to an excel, why do the numbers not have numeric values?
我正在使用 openbravo 报告,当我将报告导出到 excel 时,其中的数字没有任何数值,所以当我 select 他们求和时没用。
它与我在 Jaspersoft 中使用的字段类型有任何关系吗?
首先打开 jasper 报告应该检测细胞类型 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 时应该应用哪种模式。您甚至可以使用 net.sf.jasperreports.xls.number.pattern
属性.
自定义 excel 的模式
一个 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>
我正在使用 openbravo 报告,当我将报告导出到 excel 时,其中的数字没有任何数值,所以当我 select 他们求和时没用。
它与我在 Jaspersoft 中使用的字段类型有任何关系吗?
首先打开 jasper 报告应该检测细胞类型 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 时应该应用哪种模式。您甚至可以使用 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>