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

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

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

示例说明 

在项目中有时需要对报表显示的内容进行切换显示,如下示例中,报表初始化时显示“明细报表”;点击“显示汇总”则隐藏“明细报表”,显示“汇总报表”;点击“显示明细”则隐藏“汇总报表”,显示“明细报表”。


设置方法

  1. 电子表格设计器 Excel 中,创建一张电子表格报表。
  2. 在浏览器的“分析展现”节点下,选中电子表格,右键选择 编辑宏 进入报表宏界面
  3. 在报表宏界面新建服务器端模块,在弹出的新建模块对话框中选择对象为spreadsheetReport;事件为onBeforeOutput;并把下面的服务器宏代码复制到代码区域。
  4. 在报表宏界面新建客户端模块,在弹出的新建模块对话框中选择对象为spreadsheetReport;事件为onRender;并把下面的客户端宏代码复制到代码区域。

服务器宏类型

类型

对象

事件

ServerSide

spreadsheetReport

onBeforeOutput

服务器宏代码

function main(spreadsheetReport) {
    spreadsheetReport.printExpandedPositions(); //打印扩展位置,使得客户端宏可以调用getExpandedPositions方法
}


客户端宏类型

类型

对象

事件

ClientSide

spreadsheetReport

onRender

客户端宏代码

function main(spreadsheetReport, isAjaxRefreshCallback) {
    var detail = false;
    var cell = spreadsheetReport.getCell("B2"); //点击的单元格
    cell.style.cursor = "pointer"; //鼠标变手
    var B3List = spreadsheetReport.getExpandedPositions("B3"); //获取B3的位置
    var B3First = spreadsheetReport.parseCellIndex(B3List[0]); //获取B3第一个
    var B3Row = spreadsheetReport.getCell(B3First[0], B3First[1]).parentNode; //获取B3所在的TR
    var B5List = spreadsheetReport.getExpandedPositions("B5"); //获取所有B5的位置
    var B5Last = spreadsheetReport.parseCellIndex(B5List[B5List.length - 1]); //B5最后一个
    var B5Row = spreadsheetReport.getCell(B5Last[0], B5Last[1]).parentNode; //获取B5所在的TR
    var B6List = spreadsheetReport.getExpandedPositions("B6"); //获取B6的位置
    var B6First = spreadsheetReport.parseCellIndex(B6List[0]); //获取B6第一个
    var B6Row = spreadsheetReport.getCell(B6First[0], B6First[1]).parentNode; //获取B6所在的TR
    var B8List = spreadsheetReport.getExpandedPositions("B8"); //获取所有B8的位置
    var B8Last = spreadsheetReport.parseCellIndex(B8List[B8List.length - 1]); //B8最后一个
    var B8Row = spreadsheetReport.getCell(B8Last[0], B8Last[1]).parentNode; //获取B8所在的TR
    cell.onclick = function() {
        if (detail) {
            var tr = B3Row;
            //循环显示从B3-B5的所有行
            while (tr && tr != B5Row) {
                tr.style.display = "";
                tr = tr.nextSibling.nextSibling;
            }
            B5Row.style.display = "";
            var tr = B6Row;
            //循环隐藏从B6-B8的所有行
            while (tr && tr != B8Row) {
                tr.style.display = "none";
                tr = tr.nextSibling.nextSibling;
            }
            B8Row.style.display = "none";
            cell.innerText = "显示汇总";
            detail = false;
        } else {
            var tr = B3Row;
            //循环隐藏从B3-B5的所有行
            while (tr && tr != B5Row) {
                tr.style.display = "none";
                tr = tr.nextSibling.nextSibling;
            }
            B5Row.style.display = "none";
            var tr = B6Row;
            //循环显示从B6-B8的所有行
            while (tr && tr != B8Row) {
                tr.style.display = "";
                tr = tr.nextSibling.nextSibling;
            }
            B8Row.style.display = "";
            cell.innerText = "明细";
            detail = true;
        }
    }
    cell.onclick();
}


示例资源:电子表格切换报表.xml