【问题标题】:JasperReports: Export a xls/ods file with formulasJasperReports:导出带有公式的 xls/ods 文件
【发布时间】:2016-05-19 18:13:29
【问题描述】:

最近,我不得不使用 JasperReports 以 ods /xls 格式导出一些报告。

导出工作正常,但我没有设法在导出的列之间添加一些 excel 公式(让我们通过如下所述的一些列的总和来简化它)。

当用户修改 excel 文件中的 A 列时,C 列会被修改(基本的 excel 公式,没什么新东西......)

基于一些cmets和答案,这是我所做的

<detail>
<band height="134" splitType="Stretch">
    <componentElement>
            <reportElement x="-20" y="0" width="120" height="60" uuid="884b6c49-9006-464d-982e-e2a5f2cb3e3e">
                <property name="com.jaspersoft.studio.layout" value="com.jaspersoft.studio.editor.layout.VerticalRowLayout"/>
            </reportElement>
            <jr:table xmlns:jr="http://jasperreports.sourceforge.net/jasperreports/components" xsi:schemaLocation="http://jasperreports.sourceforge.net/jasperreports/components http://jasperreports.sourceforge.net/xsd/components.xsd">
                <datasetRun subDataset="Empty Dataset1" uuid="b60c3bee-0624-4a6a-bbb1-e706521c0a9a">
                    <dataSourceExpression><![CDATA[new net.sf.jasperreports.engine.data.JRBeanCollectionDataSource(java.util.Arrays.asList($F{dto}.getNbLgtA()))]]></dataSourceExpression>
                </datasetRun>
                <jr:column width="40" uuid="1dbb56d0-f25f-410b-9e02-d08b7fe84388">
                    <property name="com.jaspersoft.studio.components.table.model.column.name" value="Colonne1"/>
                    <jr:tableHeader height="30">
                        <staticText>
                            <reportElement x="0" y="0" width="40" height="30" uuid="ff8f394e-39ea-4d08-898f-601e92e6d1f3"/>
                            <text><![CDATA[A]]></text>
                        </staticText>
                    </jr:tableHeader>
                    <jr:detailCell height="30">
                        <staticText>
                            <reportElement x="0" y="0" width="40" height="30" uuid="c0c2b023-2d00-4080-88a3-a73f19fe9cda"/>
                            <text><![CDATA[1]]></text>
                        </staticText>
                    </jr:detailCell>
                </jr:column>
                <jr:column width="40" uuid="33f41b08-3d77-4076-9712-9514211dd3af">
                    <property name="com.jaspersoft.studio.components.table.model.column.name" value="Colonne2"/>
                    <jr:tableHeader height="30">
                        <staticText>
                            <reportElement x="0" y="0" width="40" height="30" uuid="ad2b74aa-95bf-43d7-83a4-6528f344b410"/>
                            <text><![CDATA[B]]></text>
                        </staticText>
                    </jr:tableHeader>
                    <jr:detailCell height="30">
                        <staticText>
                            <reportElement x="0" y="0" width="40" height="30" uuid="6d121f9e-e92d-45ba-9a48-82bf8b1245e0"/>
                            <text><![CDATA[2]]></text>
                        </staticText>
                    </jr:detailCell>
                </jr:column>
                <jr:column width="40" uuid="42d367d1-2be7-46bf-838b-ba4c1c6f3399">
                    <property name="com.jaspersoft.studio.components.table.model.column.name" value="Colonne3"/>
                    <jr:tableHeader height="30">
                        <staticText>
                            <reportElement x="0" y="0" width="40" height="30" uuid="63e3dd54-0297-463f-b061-4c536baf62a8"/>
                            <text><![CDATA[C]]></text>
                        </staticText>
                    </jr:tableHeader>
                    <jr:detailCell height="30">
                        <property name="net.sf.jasperreports.export.xls.formula" value="SUM(A2, B2)"/>
                    </jr:detailCell>
                </jr:column>
            </jr:table>
        </componentElement>
    </band>
</detail>

但它不起作用。

【问题讨论】:

  • 请在您的问题中添加您的代码和模板,以便准确理解您的问题
  • @New-Learner 问题已编辑
  • @Mitchapp 是的,可以使用公式。可以看Exporting XLS Formulas
  • @AlexK 实际上我使用的是 Jaspersoft Studio 6.1.1 版,当我添加一个简单的 &lt;propertyExpression name="net.sf.jasperreports.export.xls.formula"&gt;&lt;![CDATA[SUM(D2,E2)]]&gt;&lt;/propertyExpression&gt; 编译失败并显示“D2 无法解析为变量”..
  • @Mitchapp 根据 Alex 的评论您可以使用像 跨度>

标签: excel-formula jasper-reports export-to-excel


【解决方案1】:

您可以在此处找到有关使用 Excel 公式的一些有用信息: http://jasperreports.sourceforge.net/sample.reference/xlsformula/index.html#xlsformula

例如,下面是一个使用 SUM 公式的例子(表达式应该用引号括起来):

    <propertyExpression name="net.sf.jasperreports.export.xls.formula">
    <![CDATA["SUM(A1,B1)"]]>
    </propertyExpression>

您需要确保报表的 isDetectCellType 属性设置为 true 才能使公式起作用。 一个完整的工作示例(使用空数据源)如下:

    <detail>
    <band height="134" splitType="Stretch">
        <componentElement>
            <reportElement x="-20" y="0" width="120" height="60" uuid="884b6c49-9006-464d-982e-e2a5f2cb3e3e">
                <property name="com.jaspersoft.studio.layout" value="com.jaspersoft.studio.editor.layout.VerticalRowLayout"/>
            </reportElement>
            <jr:table xmlns:jr="http://jasperreports.sourceforge.net/jasperreports/components" xsi:schemaLocation="http://jasperreports.sourceforge.net/jasperreports/components http://jasperreports.sourceforge.net/xsd/components.xsd">
                <datasetRun subDataset="Empty Dataset1" uuid="b60c3bee-0624-4a6a-bbb1-e706521c0a9a">
                    <dataSourceExpression><![CDATA[new net.sf.jasperreports.engine.JREmptyDataSource()]]></dataSourceExpression>
                </datasetRun>
                <jr:column width="40" uuid="1dbb56d0-f25f-410b-9e02-d08b7fe84388">
                    <property name="com.jaspersoft.studio.components.table.model.column.name" value="Colonne1"/>
                    <jr:tableHeader height="30">
                        <staticText>
                            <reportElement x="0" y="0" width="40" height="30" uuid="ff8f394e-39ea-4d08-898f-601e92e6d1f3"/>
                            <text><![CDATA[A]]></text>
                        </staticText>
                    </jr:tableHeader>
                    <jr:detailCell height="30">
                        <textField pattern="">
                            <reportElement x="0" y="0" width="40" height="30" uuid="b989d9e8-64d8-467f-a8a0-7b92a1746a0d"/>
                            <textFieldExpression><![CDATA[1]]></textFieldExpression>
                        </textField>
                    </jr:detailCell>
                </jr:column>
                <jr:column width="40" uuid="33f41b08-3d77-4076-9712-9514211dd3af">
                    <property name="com.jaspersoft.studio.components.table.model.column.name" value="Colonne2"/>
                    <jr:tableHeader height="30">
                        <staticText>
                            <reportElement x="0" y="0" width="40" height="30" uuid="ad2b74aa-95bf-43d7-83a4-6528f344b410"/>
                            <text><![CDATA[B]]></text>
                        </staticText>
                    </jr:tableHeader>
                    <jr:detailCell height="30">
                        <textField pattern="">
                            <reportElement x="0" y="0" width="40" height="30" uuid="3448c5dc-f887-415d-9833-4a22ea5b06c8"/>
                            <textFieldExpression><![CDATA[2]]></textFieldExpression>
                        </textField>
                    </jr:detailCell>
                </jr:column>
                <jr:column width="40" uuid="42d367d1-2be7-46bf-838b-ba4c1c6f3399">
                    <property name="com.jaspersoft.studio.components.table.model.column.name" value="Colonne3"/>
                    <jr:tableHeader height="30">
                        <staticText>
                            <reportElement x="0" y="0" width="40" height="30" uuid="63e3dd54-0297-463f-b061-4c536baf62a8"/>
                            <text><![CDATA[C]]></text>
                        </staticText>
                    </jr:tableHeader>
                    <jr:detailCell height="30">
                        <textField pattern="">
                            <reportElement x="0" y="0" width="40" height="30" uuid="63e3ed54-0567-463f-b0c1-4c676baf62a8">
                                <propertyExpression name="net.sf.jasperreports.export.xls.formula"><![CDATA["SUM(A" +($V{PAGE_COUNT}+2) + ",B" + ($V{PAGE_COUNT}+2) +")"]]></propertyExpression>
                            </reportElement>
                            <textFieldExpression><![CDATA[3]]></textFieldExpression>
                        </textField>
                    </jr:detailCell>
                </jr:column>
            </jr:table>
        </componentElement>
    </band>
</detail>

【讨论】:

  • 表格的大小是可变的,所以公式必须是动态的,你会怎么做?
  • 元素允许动态表达式。因此,根据您的需要,您可以编写动态公式,例如: 这将适用于每个连续的行。
  • 我已经编辑了我的问题(添加了源代码),但仍然无法使公式有效。有什么建议吗?
  • @Mitchapp:应在 中使用公式属性以便考虑。您可以在那里使用静态文本(或更好的文本字段),如下例所示:
  • &lt;jr:detailCell height="30"&gt; &lt;staticText&gt; &lt;reportElement x="0" y="0" width="40" height="30" uuid="63e3ed54-0567-463f-b0c1-4c676baf62a8"&gt; &lt;propertyExpression name="net.sf.jasperreports.export.xls.formula"&gt; &lt;![CDATA["SUM(A" +($V{PAGE_COUNT}+1) + ",B" + ($V{PAGE_COUNT}+1) +")"]]&gt; &lt;/propertyExpression&gt; &lt;/reportElement&gt; &lt;text&gt;&lt;![CDATA[3]]&gt;&lt;/text&gt; &lt;/staticText&gt; &lt;/jr:detailCell&gt;
猜你喜欢
  • 1970-01-01
  • 2016-12-26
  • 1970-01-01
  • 1970-01-01
  • 2015-04-14
  • 1970-01-01
  • 2012-09-26
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多