【问题标题】:pentaho modify and print a parameter while exporting to excelpentaho 导出到 excel 时修改并打印参数
【发布时间】:2014-03-10 03:11:33
【问题描述】:

我使用 pentaho 报表设计器。我的 prpt 文件中有 businessdate 参数。这具有用于过滤 sql 查询的日期范围的值。我可以在导出到 html 时处理和修改它,但是在导出到 excel 时遇到问题。

日期范围采用以下格式:

 - BETWEEN {d '2014-01-01'} AND {d '2014-01-31'}
 - IN ({d '2014-01-14'},{d '2014-01-15'}, {d '2014-01-19'} ,{d '2014-01-20'},{d '2014-01-21'})

我喜欢找出最大和最小日期并显示出来。但是,在这种使用 excel 的情况下,我很乐意将它们用逗号分隔,如下所示。

- 2014-01-01, 2014-01-31
- 2014-01-14, 2014-01-15, 2014-01-19, 2014-01-20, 2014-01-21

如果我使用下面显示的基本公式,它可以在 excel 中使用,但是当我将其应用于 excel - pentaho 报表设计器中 businessDate 元素的公式部分时,它不起作用。

=TRIM(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(B4,"{d '",""), "BETWEEN", ""), "IN", ""),"'}",", "), " AND ", ""),")",""),"(",))

不必如此。我对任何建议在打印到 Excel 之前格式化此原始日期范围的方法感到满意。

提前谢谢你。

【问题讨论】:

    标签: excel report pentaho designer


    【解决方案1】:

    在浪费了很多时间之后,我找到了一种适用于所有导出类型的方法。正如我在问题中所说,我正在使用“结构选项卡”-> 选择“主报告”->“属性”选项卡--> html->“附加标题”属性来修改 html 打印的日期。

     <script type="text/javascript">
    
        function init() {
    
        var tableList = document.getElementsByTagName("table");
         var businessDate = document.getElementById("businessDatePeriodSelected");
         businessDate.innerHTML = businessDate.innerHTML+"testDateModified";
        }
    
        window.onload = init;
    
        </script>
    

    这段代码完成了这项工作。但是仅适用于html。我需要想出一些新的东西。我也在寻找 excel 和 pdf 导出的解决方案。

    解决方案如下: 单击右上角“结构”选项卡旁边的“数据”选项卡。您将在树中看到“功能”。右键单击并点击“添加功能”。选择“脚本”-->“Bean-Scripting Framework (BSF)”。选择在 Functions 下创建的函数。给它一个名字并将下面的代码添加到“表达式”部分。 [这不需要开始或结束标签]

    /* businessdate is one of my parameters that I like to display on the report.
    dataRow is automatically recognized by the interpreter which can be used for calling parameter values. It seems like came out of nowhere.*/
    
    
             String value = dataRow.get("businessdate"); 
    
                value= value.replaceAll("[^0-9\\-\\{\\}]", ""); 
                value= value.replaceAll("[\\{]", ""); // replace all {
                value= value.replaceAll("[\\}]", ","); // replace all }
    
                value= value.substring(0, value.length()-1);
                String[] dateArr = value.split(",");
    
                return dateArr[0] +" - "+dateArr[dateArr.length-1]; 
    

    您需要做的最后一件事是将函数拖放到报告中合适的位置。它将找到一个显示修改后的营业日期的文本框。

    如果您想在您的 pentaho 报告上打印一个参数,这对所有导出(html、pdf 和 excel)都有效。您也可以在打印前对其进行修改。这个link 非常有用,因为语法在某些方面略有不同。

    祝你好运。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2022-12-09
      • 1970-01-01
      • 1970-01-01
      • 2020-01-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多