示例说明
电子表格报表中在非数据扩展区域添加了静态文字,当报表没有数据时看起来很不美观,则需要隐藏报表中的表格。如下:
(1)有数据时:
(2)没数据时:
(3)使用宏代码判断没有数据,隐藏表格,效果如下:
版本及客户端说明
1.smartbi版本:V5.1
2.客户端:PC
3.浏览器:IE11、谷歌浏览器(Chrome)、火狐浏览器(Firefox)
设置方法
1、在电子表格设计器(Microsoft Office Excel)中,创建电子表格报表。
2、在浏览器的资源定制节点下,选中电子表格,右键选择 编辑宏 进入报表宏界面。
3、使用宏可以实现,目前有两种设置方式,一种是使用服务器端宏,一种是使用客户端宏;使用服务器端宏则导出报表也是生效的,使用客户端宏则导出是不生效的。根据需要两者选择一个就可以了。
-
客户端宏:在报表宏界面新建客户端模块。在弹出的新建模块对话框中,选择对象为spreadsheetReport、事件为onRender、并把下面宏代码复制到代码编辑区域。
客户端宏代码
1
2
3
4
5
6
7
8
9
10
11
12
function
main(spreadsheetReport) {
var
RowCount = spreadsheetReport.getRowCount();
// 返回电子表格的行数
var
ColumnCount = spreadsheetReport.getColumnCount();
// 返回电子表格列数
// 对第一个扩展数据的单元格进行判断,若该字段扩展出无数据,则表示表格无数据。本示例中是C2单元格
if
(spreadsheetReport.getCell(1, 2).innerHTML ==
""
) {
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、并把下面宏代码复制到代码编辑区域。
服务器端宏
1
2
3
4
5
6
7
function
main(spreadsheetReport) {
var
cells = spreadsheetReport.workbook.worksheets.get(0).cells;
var
posList = spreadsheetReport.sheets[0].getExpandedPositions(
"C3"
);
if
(posList.length == 1 && cells.get(posList[0].row, posList[0].column).value ==
null
) {
cells.deleteRows(posList[0].row - 1, 2);
//从C3所在行开始,删除两行数据
}
}
关键对象总结
- 客户端宏中通过spreadsheetReport.getCell(i, 0).parentNode.style.display = "none";方法隐藏行
- 服务端宏中通过cells.deleteRows(posList[0].row - 1, 2)方法删除行
参考链接:http://wiki.smartbi.com.cn:18081/pages/viewpage.action?pageId=21955886