我使用jrxml jasper将我的内容导出到.xls文件。我有一个名为PollutantQuantity
的文件,它在DB中作为字符串保留。
我正在获取相同的值并将这些值提供给.jrxml。我可以看到正确填充的值没有任何问题。现在,我的客户希望直接从导出的工作表中执行一些SUM
,MULTIPLY
功能。
在这种情况下,由于呈现为文本,我无法进行任何操作。
我的Jrxml代码片段就像
<property name="net.sf.jasperreports.export.detect.cell.type" value="true"/>
<field name="pollutantQty" class="java.lang.String" />
<textField>
<reportElement x="0" y="0" width="100" height="20" isRemoveLineWhenBlank="true" />
<box leftPadding="10"><pen lineColor="#000000" /><topPen lineWidth="0.5" /><leftPen lineWidth="0.5" /><bottomPen lineWidth="0.5" /><rightPen lineWidth="0.5" />
</box>
<textFieldExpression ><![CDATA[$F{pollutantQty}]]></textFieldExpression>
</textField>
我正在使用属性字段,并且我的字段emissionQty被声明为字符串。我怎样才能转换它,以便在输出中优于emitQty 解释为数字。
答案 0 :(得分:0)
将字段定义为数字 es。 java.lang.Double
<field name="pollutantQty" class="java.lang.Double" />
在报告中使用模式按钮显示
<textField pattern='###,##0.00'>
<reportElement x="0" y="0" width="100" height="20" isRemoveLineWhenBlank="true" />
<box leftPadding="10"><pen lineColor="#000000" /><topPen lineWidth="0.5" /><leftPen lineWidth="0.5" /><bottomPen lineWidth="0.5" /><rightPen lineWidth="0.5" />
</box>
<textFieldExpression ><![CDATA[$F{pollutantQty}]]></textFieldExpression>
</textField>
如果您不能将其声明为Number(在数据库中为String),则需要将String转换为Number es。
<textFieldExpression><![CDATA[Double.parseDouble($F{pollutantQty})]]></textFieldExpression>
在这种情况下,最好使用printWhenExpression
使用例如regex,以避免错误。
<printWhenExpression><![CDATA[$F{pollutantQty}.matches("-?\\d+(\\.\\d+)?")]]></printWhenExpression>
或textFieldExpression
答案 1 :(得分:0)
作为建议解决方案的补充说明-如果您已经在处理数字字段(在我的情况下为java.math.BigDecimal),并且无法在生成的excel文件(SUM)中使用计算功能-检查您的JRXML文件,看看它是否包含此属性:
<property name="net.sf.jasperreports.export.xls.detect.cell.type" value="true"/>
OP具有属性,但字符串中不包含 xls 。