2012-02-06 74 views
0

有沒有人設法使用DynamicJasper添加超鏈接到Excel單元格?DynamicJasper Excel和HyperLinks

在src中有測試顯示如何做到這一點....但我擔心它們只適用於html輸出而不是xls。

EG

DJHyperLink djlink = new DJHyperLink(); 
    djlink.setExpression(new StringExpression() { 
     public Object evaluate(Map fields, Map variables, Map parameters) {    
      return "http://linkInImage.com?param=" + variables.get("REPORT_COUNT"); 
     } 
    }); 
    djlink.setTooltip(new LiteralExpression("I'm a literal tootltip"));  

然後AbstractColumn.setLink(djlink),這似乎並不爲evaluate()工作永遠不會被調用時,我輸出到Excel。

我也嘗試設置字面=HYPERLINK("www.test.com") .....再次沒有快樂。

現在卡住了。

+1

只是一個快速更新:我認爲我已經或多或少地嘗試了所有我可以與DJ,我發電子郵件支持,看看我是否可以支付一些建議......等待答覆。同時,我發現了docx4j,在第一次檢查時,它似乎做了我需要做的和非常容易的事情,唯一的問題就是在openoffice中打開Excel xlsx文件。除此之外,我還設法在45分鐘內啓動並運行它。很酷。 – HKalsi 2012-02-08 12:59:13

+0

沒有聽到動態賈斯珀的人回來。所以我花了24小時學習所有關於SpreadsheetML和Docx4j的樂趣,超級靈活,超級快捷.....我喜歡它!除了ooxml的初始複雜性! – HKalsi 2012-02-09 21:57:31

回答

0

我相信你現在一定已經找到了解決方案。但在這裏回答,以便它可以幫助他人。我找不到作爲發行說明的一部分提到的特定修復程序,但這似乎與DJ 4.0.3 release正常工作。

我看到這AbstractLayoutManager,

if (column.getLink() != null) { 
    String name = getDesign().getName() + "_column_" + getReport().getColumns().indexOf(column); 
    HyperLinkUtil.applyHyperLinkToElement((DynamicJasperDesign) getDesign(),column.getLink(),textField,name); 
} 

..with最終呼叫導航到ExpressionUtil :: createCustomExpressionInvocationText2(),

public static String createCustomExpressionInvocationText2(String customExpName) { 

    String fieldsMap = getTextForFieldsFromScriptlet(); 
    String parametersMap = getTextForParametersFromScriptlet(); 
    String variablesMap = getTextForVariablesFromScriptlet(); 

    String stringExpression = "(("+CustomExpression.class.getName()+")$P{REPORT_PARAMETERS_MAP}.get(\""+customExpName+"\"))." 
     +CustomExpression.EVAL_METHOD_NAME+"("+ fieldsMap +", " + variablesMap + ", " + parametersMap +")"; 

    return stringExpression; 
} 

當我與你的代碼嘗試,它的工作罰款HTML以及Excel。