示例说明
在透视分析中,希望指定隐藏某一列,可以通过宏代码实现。
本宏只对清单报表生效(没有展开、收缩操作的报表),并且不支持字段显示分类汇总。使用宏之前的效果:
使用宏之后的效果:
设置方法
- 在“分析展现”节点下,创建一张透视分析。
- 选中透视分析,右键选择 编辑宏 进入报表宏界面。
- 在报表宏界面新建客户端模块,在弹出的新建模块对话框中选择对象为 INSIGHT;事件为 onRenderTable;并把下面宏代码复制到代码区域。
宏类型
类型 | 对象 | 事件 |
---|---|---|
ClientSide | INSIGHT | onRenderTable |
宏代码
代码块 | ||||||
---|---|---|---|---|---|---|
| ||||||
function main(insight) {
var cellIndex = 0; //可以指定要隐藏的列序号,序号从0开始。
hideAColumn(insight, cellIndex);
}
//隐藏指定列
function hideAColumn(insight, cellIndex) {
var newtables = new Array();
var table = insight.grid.mainTable;
table.style.backgroundColor = "rgba(255,255,255,0)"; //设置table背景透明度为0
var columnSize = insight.grid.getColumnSize();
var tr = table.tBodies[0].firstChild;
var rowIndex = 0;
//这个算法只对从左到右,从上到下合并有规律的合并单元格有用,对于间隔合并单元格的会有问题
while (tr) {
if (tr.tagName == "TR") {
var td = tr.lastChild;
var columnIndex = columnSize - 1;
var row = newtables[rowIndex] = [];
while (td) {
if (td.tagName == "TD") {
for (var y = 0; y < td.colSpan; y++) {
row[columnIndex - y] = td;
}
columnIndex = columnIndex - td.colSpan;
}
td = td.previousSibling;
}
rowIndex++;
}
tr = tr.nextSibling;
}
var length = newtables.length;
var hideColumns = [cellIndex]; //要隐藏的列序号,从0开始
insight.grid.customHideColumns = hideColumns;
for (var i = 0; i < length; i++) {
var row = newtables[i];
if (row && row.length > 0) {
/*隐藏多列处理,直接找到对应的列并隐藏 */
for (var ci in hideColumns) {
var indexi = hideColumns[ci];
if (row[indexi]) {
var nn = row[indexi];
if (nn != null) {
if (nn.getAttribute("isAgg") != "1") {
nn.style.display = "none";
nn.setAttribute("isHideColumn", "1"); //可以不要,这里只是做个标识,方便扩展使用
} else {
if (nn.colSpan >= 2) {
nn.colSpan = nn.colSpan - 1;
} else {
nn.setAttribute("isHideColumn", "1"); //可以不要,这里只是做个标识,方便扩展使用
}
}
}
}
}
}
}
} |
关键对象总结
- 获取单元格对象:grid.getCell(m, cellIndex);
- 设置行隐藏:cell.style.display = "none";
资源下载
资源:migrate.xml
borderColor | #BBBBBB |
---|---|
bgColor | #F0F0F0 |
borderWidth | 1 |
borderStyle | solid |