0

我正在研究 BIRT 交叉表报告。在我的报告中,我需要创建一个全局数组变量,并且需要根据交叉表的列数填充数组变量。我正在计算交叉表的 onRender 事件中的 columnCount,并且我需要将此值传递给全局函数,并且需要从全局函数的结果中填充全局变量。然后在其他一些交叉表或同一个交叉表中,我需要访问这个数组变量。

我只是根据交叉表中数据元素的 onRender 中生成的列计数生成列名 A、B、C...Z、AA、AB...等,我需要通过传递此计数来填充数组变量到全局函数,然后函数返回它作为参数接收的数字的 excel 名称(如 1-A、2-B、3-C、....26-Z、27-AA...等)结果被添加到数组变量中。此数组变量将用于数据元素 onRender 的交叉表的另一行,我不能对数据集执行此操作,因为交叉表中应用了排序函数(以克服交叉表的默认排序)。

我怎样才能做到这一点,或者任何其他简单的方法来处理这个?

4

1 回答 1

0

我知道了。一个粗心的小错误花了4天..我解决了如下。

初始化报表初始化事件中的全局变量和函数。从交叉表数据元素的 onRender 事件中调用此函数并传递计数器值,该函数获取此计数器值并找到其等效的 excel 列名称并插入到全局变量中。

columnCount = 1;
counter = 1;
names=new Array();
names.push('');     /* for 0th position */    
function toName(number)
{
    name = "";
    while(number>0)
    {
        modulo = (number-1)%26;
        name = String.fromCharCode(65 + modulo).toString()+name;
        number = parseInt((number-modulo)/26);  
    }
    names.push(name);
}

以上代码在报告初始化事件中声明。

然后在数据元素中将计数器值传递给函数,如下所示。然后增加计数器。

toName(columnCount);
columnCount++;

然后在我需要excel列名来设置excel公式的数据元素中,该元素的onRender方法获取计数器索引的数组值。

if(counter==columnCount)
{
    counter=1;
}   
this.setDisplayValue(names[counter]);
counter++;

这是通过 onRender 事件导出到 excel 时数据元素的更改方式。

于 2015-10-13T07:04:42.237 回答