2010-09-16 45 views
2

我想生成一個使用DynamicJasper的Excel電子表格,它使用公式計算列的小計。例如:如何使用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公式來實現它,我會很高興。

回答

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對象數組的數據,我可以從地圖字段確定我需要的一切。

在我看來是一個相當大量的工作,但我不那麼熟悉DynamicJasper的,用它一小會兒,現在......也許爲xls格式,你甚至不需要getBigDecimalFormatter,只是b1.addFooterVariable()

但在另一方面,如果你只是創建數據的普通表,然後用戶在Excel中一個鍵創建資金,這是不是多少工作呢:)

小心,NB

相關問題