如何转换存储为文本的数字:使用Jrxml / jasper

时间:2015-12-14 12:41:58

标签: jasper-reports

我使用jrxml jasper将我的内容导出到.xls文件。我有一个名为PollutantQuantity的文件,它在DB中作为字符串保留。

我正在获取相同的值并将这些值提供给.jrxml。我可以看到正确填充的值没有任何问题。现在,我的客户希望直接从导出的工作表中执行一些SUMMULTIPLY功能。

在这种情况下,由于呈现为文本,我无法进行任何操作。

我的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 解释为数字。

2 个答案:

答案 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使用例如,以避免错误。

<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