温馨提示
本文档的示例代码仅适用于本文档中的示例报表/场景。若实际报表/场景与示例代码无法完全适配(如使用功能不一致,或多个宏代码冲突等),需根据实际需求开发代码。
示例说明
我们有时候会需要在电子表格报表中根据参数值设置某一行或者某一列隐藏。可以参照如下方法进行设置。效果演示如下:
(1)未添加该宏时,报表展示如下:
(2)添加了宏,并且“示例参数”的值为“隐藏行”时,隐藏行所在的一行被隐藏,如图:
(3)切换“示例参数”值为“隐藏列”是,隐藏列所在的一列被隐藏,如图:
版本及客户端说明
1.smartbi版本:V7.0
2.客户端:PC
3.浏览器:IE11、谷歌浏览器(Chrome)、火狐浏览器(Firefox)
设置方法
1、首先在电子表格设计器(Microsoft Office Excel)中,创建电子表格报表。
2、在浏览器的资源定制节点下,选中电子表格,右键选择 编辑宏 进入报表宏界面。
3、在报表宏界面新建服务端模块。在弹出的新建模块对话框中,选择对象为spreadSheetReport、事件为onBeforeOutput、并把下面宏代码复制到代码编辑区域,并作相应的修改
宏类型
类型 | 对象 | 事件 |
---|---|---|
ServerSidee | spreadsheetReport | onBeforeOutput |
宏代码
function main(spreadsheetReport) { var sheet = spreadsheetReport.workbook.getWorksheets().get(0); //获取当前sheet,从0开始计数 var value = spreadsheetReport.getParameterValue("隐藏"); //获取参数值 if (value == "隐藏行") { sheet.cells.getRow(7).setHeight(0); //设置第八行隐藏,从0开始计数 } else { sheet.cells.getColumn(4).setWidth(0); //设置第五列隐藏,从0开始计数 } }
关键对象总结
通过spreadsheetReport.workbook.getWorksheets().get(0) 方法获取需要设置隐藏效果的sheet。
- 通过spreadsheetReport.getParameterValue("ParamName") 方法获取参数的值
- 通过 sheet.cells.getRow(7).setHeight(0)方法以及sheet.cells.getColumn(4).setWidth(0)方法设置对应的行的高度为0以及列的宽度为0实现隐藏。
扩展对象总结
- 删除指定列数据sheet.cells.deleteColumn(3); //从0开始计数
- spreadsheetReport.outputType判断导出类型 ,导出类型可以有:PDF、PNG、WORD、EXCEL、EXCEL2007、HTML,通过浏览器刷新他的值是refresh
资源下载
报表资源:隐藏行列migrate.xml
注意事项:使用该服务端宏,则隐藏行列时,导出电子表格为Excel等时,相应的行列也会被隐藏。
2 评论
徐晓兰 发表:
有时会希望只有导出报表的时候,才执行服务端的宏逻辑,这时候,就可以通过outputType的值判断,譬如下面的判断:
//导出类型可以有:PDF、PNG、WORD、EXCEL、EXCEL2007、HTML,通过浏览器刷新他的值是refresh
//您也可以使用 logger.debug(spreadsheetReport.outputType);调试查看,方法请见报表宏的调试中的服务端宏
if (spreadsheetReport.outputType != "EXCEL2007"){
return;
}
徐晓兰 发表:
删除某列可以使用:
var
sheet = spreadsheetReport.workbook.getWorksheets().get(0);
//获取当前sheet,从0开始计数
sheet.cells.deleteColumn(1); //从0开始计数
但注意:删除的这一列不能被公式引用,否则会有错误的。