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

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

示例说明

电子表格报表中在非数据扩展区域添加了静态文字,当报表没有数据时看起来很不美观,则需要隐藏报表中的表格。如下:

版本及客户端说明

1.smartbi版本:V9

2.客户端:PC

3.浏览器:IE11、谷歌浏览器(Chrome)、火狐浏览器(Firefox)

设置方法

1、在电子表格设计器(Microsoft Office Excel)中,创建电子表格报表。

2、在浏览器的“分析展现”节点下,选中电子表格,右键选择 编辑宏 进入报表宏界面

3、使用宏可以实现,目前有两种设置方式,一种是使用服务器端宏,一种是使用客户端宏;使用服务器端宏则导出报表也是生效的,使用客户端宏则导出是不生效的。根据需要两者选择一个就可以了


  • 客户端宏:在报表宏界面新建客户端模块。在弹出的新建模块对话框中,选择对象为spreadsheetReport、事件为onRender、并把下面宏代码复制到代码编辑区域。

    客户端宏代码
    function main(spreadsheetReport, isAjaxRefreshCallback) {
        var RowCount = spreadsheetReport.getRowCount(); // 返回电子表格的行数
        var ColumnCount = spreadsheetReport.getColumnCount(); // 返回电子表格列数
        // 对第一个扩展数据的单元格进行判断,若该字段判断为空值,则表示表格无数据。本示例中是B5单元格
        if (spreadsheetReport.getCell(4, 1).firstChild.firstChild.innerText === "") {
            for (i = 0; i < RowCount; i++) {
                // 在excel中的行数据不扩展的,隐藏表格
                spreadsheetReport.getCell(i, 0).parentNode.style.display = "none";
            }
            //spreadsheetReport.getCell(x, y)是从excel的A1位置起,A1位置为0,0
        }
    }
  • 服务端宏:在报表宏界面新建服务器模块。在弹出的新建模块对话框中,选择对象为spreadsheetReport、事件为onBeforeOutput、并把下面宏代码复制到代码编辑区域。


    服务器端宏
    function main(spreadsheetReport) {
        var cells = spreadsheetReport.workbook.worksheets.get(0).cells;
        var posList = spreadsheetReport.sheets[0].getExpandedPositions("B3");
        if (posList.length === 1 && cells.get(posList[0].row, posList[0].column).value === null) {
            cells.deleteRows(posList[0].row - 1, 2); //从B3所在行开始,删除2行数据
        }
    }


       

关键对象总结

  • 客户端宏中通过spreadsheetReport.getCell(i, 0).parentNode.style.display = "none";方法隐藏行
  • 服务端宏中通过cells.deleteRows(posList[0].row - 1, 2)方法删除行

资源下载

报表资源:无数据隐藏电子表格.xml