2010-09-16 27 views
2

Je voudrais produire une feuille de calcul Excel en utilisant DynamicJasper qui calcule des sous-totaux de colonnes en utilisant des formules. Par exemple:Comment utiliser DynamicJasper pour créer une feuille de calcul Excel avec des formules pour les sous-totaux de colonnes?

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

      Sales subtotal $600.00 
      IT subtotal  $850.00 

Je veux que les deux rangées inférieures à produire de telle sorte que les chiffres sont le résultat de formules Excel, de sorte que si les heures ont été modifiées, les sous-totaux changeraient.

Je rencontre actuellement diverses difficultés. Si je définis la colonne Expenses pour avoir le type double, puis DynamicJasper insère $ et en fait une chaîne. (L'addition devient donc impossible.) Mais un problème plus fondamental est de savoir comment définir une cellule comme sous-total de cellules au-dessus. Je serais heureux si quelqu'un pouvait me diriger vers un exemple qui totalisait simplement une colonne, tant qu'il utilisait des formules Excel pour l'accomplir.

Répondre

2

il ferait quelque chose comme ça, et cela n'a pas été testé ou quoi que ce soit:

GroupBuilder gb1 = new GroupBuilder("column_name"); 

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

getBigDecimalFormatter est:

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(); 
     }}; 
} 

thats à son sujet, mais méfiez-vous: vous devez avoir un contrôle total sur les données que vous créez proviennent de. Au getBigDecimalFormatter par exemple vous devez savoir quelles lignes dans la colonne que vous calculez. Généralement j'ai un tableau d'objets 2d pour les données et je peux à partir des champs de la carte déterminer tout ce dont j'ai besoin.

À mon avis est beaucoup de travail, mais je ne suis pas familier avec dynamicJasper, utiliser un peu de temps maintenant ... Peut-être pour le format xls vous ne devez même pas getBigDecimalFormatter, juste b1.addFooterVariable().

Mais d'autre part, si vous venez de créer simple table de données, puis l'utilisateur dans Excel avec un seul bouton crée des sommes qui ne sont pas que beaucoup de travail de toute façon :)

Prenez garde, Nb