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




示例说明

在使用电子表格做KPI等报表时,需要保持整体的风格,如果电子表格中带有图形,并且图形的高度是动态变化时,图形四周及其所覆盖的单元格的背景色就需要加以调整,以便保持报表的美观。

未使用宏调整背景色:

使用宏调整背景色:

 

切换参数

   

设置方法

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

  2. 在浏览器的资源定制节点下,选中电子表格,右键选择 编辑宏 进入报表宏界面

  3. 设置图形高度动态变化宏代码(该步骤可选)

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

宏类型

类型

对象

事件

服务端宏

spreadsheetReportonBeforeOutput

宏代码

function main(spreadsheetReport) {
    var sheet = spreadsheetReport.workbook.worksheets.get(0);
    //获取图表,"图表 1"为图表的名称
    var shape = sheet.shapes.get("图表 1");
    var cells = sheet.cells;
    //获取图表左上角的行号、右下角的行号、左上角的列号和右下角的列好,以确定需要设置背景色的单元格的范围
    var upperLeftRow = shape.upperLeftRow;
    var lowerRightRow = shape.lowerRightRow;
    var upperLeftColumn = shape.upperLeftColumn;
    var lowerRightColumn = shape.lowerRightColumn;
    for (var i = upperLeftRow;
    i <= lowerRightRow;
    i++) {
        //由于图形只占B到H列,A列和I列同样需要设置背景色,因此需要对范围进行增减1
        for (var j = upperLeftColumn - 1;
        j <= lowerRightColumn + 1;
        j++) {
            var cell = cells.get(i, j);
            var style = cell.style;
            style.foregroundColor = spreadsheetReport.getColor(242, 242, 242);
            style.pattern = 1;
            cell.style = style;
        }
    }
}


资源下载:设置图形下的单元格背景色.xml

  

备注:若打开报表时抛出如下错误

是由于在代码中,对需要设置的列前后扩充了一列,需要检查Excel中图形是否跨出了其单元格列范围,若超出了其范围,会导致代码错误