我想使用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公式来实现它。
答案 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