0

DynamicJasper を使用して Excel セルにハイパーリンクを追加できた人はいますか?

それを行う方法を示すsrc内のテストがあります....しかし、それらはxlsではなくhtml出力のみを対象としているのではないかと心配しています。

例えば

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").....再び喜びはありません。

少し立ち往生しています。

4

1 に答える 1

0

私はあなたが今までにこれに対する解決策を見つけたに違いないと信じています. ただし、他の人を助けるためにここで答えてください。リリース ノートの一部として言及されている特定の修正を見つけることができませんでしたが、これはDJ 4.0.3 リリースで問題なく動作するようです。

これは AbstractLayoutManager で確認できます。

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

..最終的な呼び出しで 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;
}

あなたのコードを試してみたところ、Excel だけでなく HTML でも問題なく動作しました。

于 2013-03-18T12:46:44.007 に答える