页面树结构
转至元数据结尾
转至元数据起始


该宏示例在 V10.5上 验证通过

提示:本文档的示例代码仅适用于本文档中的示例报表/场景。若实际报表/场景与示例代码无法完全适配(如使用功能不一致,或多个宏代码冲突等),需根据实际需求开发代码。

1. 示例效果

原电子表格宏实现:https://wiki.smartbi.com.cn/pages/viewpage.action?pageId=51943260

  • 原效果:

  • 预期效果:通过加减号来控制行列的隐藏

2. 操作步骤

  • 步骤一: 新建一个空白的自助仪表盘

  • 步骤二:  拖入"web电子表格",双击”web电子表格“进入编辑界面

  • 步骤三:数据如下,保存退出

  • 步骤四:鼠标右键进入宏管理页面

  • 步骤五:新建宏。事件:“ onAfterRender(组件渲染后)

  • 步骤六:编写宏代码实现效果

把下面宏代码复制到代码区域

方法一:点击整个单元格隐藏/显示列

function main(page: IPage, portlet: ITableSheetPortlet) {
    let cell = portlet.getCell(0, 0);
    let html = cell.getHtml() || "";
    cell.setHtml("- " + html);
    cell.setStyle({
        cursor: "pointer"
    });

    let collapsed = false;
    cell.addEventListener("click", function () {
        if (collapsed) {
            cell.setHtml("- " + html);
            for (var i = 1; i <= 3; i++) {
                for (var j = 0; j < portlet.getRowCount(); j++) {
                    let currentCell = portlet.getCell(j, i);
                    currentCell.setStyle({ display: ""});
                }
            }
        } else {
            cell.setHtml("+ " + html);
            for (var i = 1; i <= 3; i++) {
                for (var j = 0; j < portlet.getRowCount(); j++) {
                    let currentCell = portlet.getCell(j, i);
                    currentCell.setStyle({ display: "none"});
                }
            }            
        }
        collapsed = !collapsed;
    });
}

方法二:点击+/-来显示/隐藏列(使用接口实现)

function main(page: IPage, portlet: ITableSheetPortlet) {
    let span = appendCollapseElement(portlet, "A1");
    let collapsed = false;
    span.addEventListener('click', function () {
        let spanText = collapsed ? "-" : "+";
        span.setHtml(spanText);
        hideColumns(portlet, 1, 4, !collapsed);
        collapsed = !collapsed;
    });
}

function appendCollapseElement(portlet: ITableSheetPortlet, cellName: string) {
    let cell = portlet.getCell(cellName);
    let text = cell.getText() || "";
    cell.setText("");
    let span = document.createElement("span");
    span.innerHTML = "-";
    span.style.cursor = "pointer";

    let s = cell.appendChild(span);
    cell.appendChild(document.createTextNode(" " + text));
    return s;
}

function hideColumns(portlet: ITableSheetPortlet,
    from: number, to: number, hidden: boolean) { 
    for (let c = from; c < to; c++) {
        var column = portlet.getColumn(c);
        column.setVisible(!hidden)
    }
}
  • 步骤七:点击 保存。重新访问报表,可看到效果已实现

3. 下载资源

加号控制隐藏或显示列.xml

  • 无标签