-
土豆我是马铃薯 数据达人Lv4
发表于2019-10-25 17:47
楼主
功能:通过点击文本或者按钮,实现一键张开某个表所有层级,再次点击收回展开
1、
添加一个文本组件,添加钻取方式为万能式,脚本如下(固定写法):
javascript:
var value=g_rptpage.calcParam.calcparams.getValue("@expand","false");
console.log(value);
if(value=="true"){
g_rptpage.calcParam.calcparams.setValue('@expand',"false");
}else{
g_rptpage.calcParam.calcparams.setValue('@expand',"true");
}
_z('<#=srcrpt.id#>','drillpath=;hiddencalcparams=false')
2、
然后添加一个计算前脚本:
//机构的维表元
def jgCellName="A1";
//机构维的级次
def dimMaxLevel=2;
//缩进距离
def indent = 15;
def jgRow = 0;
def jgCol = 0;
//设置浮动范围
def setFloatRange(rc,left,top,right,bottom){
rc.setTop(top);
rc.setLeft(left);
rc.setRight(right);
rc.setBottom(bottom);
}
//展开所有级次
def expandAll(jgCellName,dimMaxLevel,indent){
jgCell = rpt.getCell(jgCellName);
jgRow = jgCell.getRow();
jgCol = jgCell.getCol();
//注意此脚本只适合机构表元在第一个分析区的情况
//浮动分析区的范围
fxqRect = rpt.getFxq(0).getRange();
//添加行数
rpt.insertRow(jgRow+1,dimMaxLevel);
if (fxqRect.getBottom()==jgRow+1){
//需要调整分析范围
fxqRect.setBottom(fxqRect.getBottom()+dimMaxLevel);
}
for(r in 0..<dimMaxLevel){
row = r +jgRow+1;
for(c in 0..<rpt.getColCount()){
precl = rpt.getCell(jgRow,c);
cl = rpt.getCell(row,c);
cl.copyAll(precl);
cl.adjustCellExp(true,true,jgRow-1,r+1);
if (precl.isDimCell()){
cl.copyToDimCell(precl);
//设置浮动范围
rc = precl.getFloatRange();
setFloatRange(cl.getFloatRange(),rc.getLeft(),row,rc.getRight(),dimMaxLevel+jgRow+1);
cl.setProperty('indent',indent*(r+1)+'');
cl.setProperty('url','');
cl.setFloatSumLevel(r+1);
//把源行的浮动表元范围设置下
if (r==0){
precl.getFloatRange().setBottom(dimMaxLevel+jgRow+1);
precl.setFloatSumLevel(0);
precl.setProperty('url','');
}
}
}
}
}
if("true".equals(params.getValue("@expand"))){
expandAll(jgCellName,dimMaxLevel,indent);
}