如何使用DynamicJasper创建包含列小计公式的Excel电子表格?

时间:2010-09-16 18:24:36

标签: java excel jasper-reports dynamic-jasper

我想使用DynamicJasper生成Excel电子表格,该电子表格使用公式计算列的小计。例如:

Employee   Department        Expenses
----------------------------------------
Alice      Sales             $600.00
Bob        IT                $400.00
Charlie    IT                $450.00

           Sales subtotal    $600.00 
           IT subtotal       $850.00

我希望以这样的方式生成底部的两行,这些数字是Excel公式的结果,因此如果编辑了小时数,小计将会改变。

我目前遇到各种困难。如果我将Expenses列设置为类型double,则DynamicJasper会插入$并使其成为字符串。 (因此添加变得不可能。)但更基本的问题是如何将单元格定义为其上方单元格的小计。

如果有人能指出我只是简单地总计一个列的例子,我会很高兴,只要它使用excel公式来实现它。

1 个答案:

答案 0 :(得分:2)

它会做这样的事情,而且没有经过测试或其他任何事情:

GroupBuilder gb1 = new GroupBuilder("column_name");

gb1.addFooterVariable(frb.getColumn("column_name_with_amounts"),CALCULATION.EMPTY,style_lala,getBigDecimalFormatter());

getBigDecimalFormatter是:

private DJValueFormatter getBigDecimalFormatter(f) {
    return new DJValueFormatter(){

        public Object evaluate(Object value, Map fields, Map variables, Map parameters) {

            return "here is excel code for calculating like sum=SUM(A1:A15)";
        }

        public String getClassName() {
            return String.class.getName();
        }};
}

关于它,但要注意:你必须完全控制你正在创建报告的数据。例如,在getBigDecimalFormatter,您必须知道要计算的列中的哪些行。通常我有2d Object数据用于数据,我可以从Map字段确定我需要的一切。

在我看来是相当多的工作,但我不熟悉dynamicJasper,现在使用它一段时间......也许对于xls格式你甚至不需要getBigDecimalFormatter,只是{ {1}}。

但另一方面,如果你只是创建普通的数据表,然后用Excel中的用户只用一个按钮就可以创建总和,这无论如何都没有那么多:)

小心,Nb