一、概述

1、电子表格宏简介

电子表格常用于制作自动化报表,在电子表格上配置的样式无法满足需求,或希望对报表进行特殊的调整时,比如调整展现样式,增加功能按钮等,都可以使用电子表格宏对报表进行处理。

2、操作入口

二、电子表格宏模块

1、类型

2、对象

3、宏事件

spreadsheetReport:电子表格对象,提供8个宏事件

事件解释main函数参数
onRender每次刷新后spreadsheetReport:电子表格报表对象
onRenderReport()打开报表后spreadsheetReport:电子表格报表对象
onParamValueChanged修改参数值后spreadsheetReport:电子表格报表对象 param:当前改变的参数对象
onLinkClick点击链接时spreadsheetReport:电子表格报表对象 ruleName:跳转规则名称 params: 报表参数
onChartClick点击图表时spreadsheetReport:电子表格报表对象 spreadsheetReportChart:被点击图形名称,对象结构
onWriteBackInsertedRow插入行后spreadsheetReport:电子表格报表对象 editingCellPosition:当前编辑单元格,对象结构{row:, column:}
onWriteBackCellValueChanged修改单元格值后spreadsheetReport:电子表格报表对象 editingCellPosition:当前编辑单元格,对象结构{row:, column:} oldValue:修改前的值 newValue:修改后的值 newDisplayValue:修改后的显示值
onWriteBackSavedData保存回写数据后spreadsheetReport:电子表格报表对象 succeeded:逻辑值,回写是否成功

chart:图形对象

事件解释
beforeRenderer图形渲染之前执行
afterRenderer图形渲染之后执行
pointClick点击图形对象时触发
事件解释适用场景
onBeforeOutput在输出结果前常用输出表格之前改写电子表格输出结果
onAfterGetGridData在获取数据后常用于获取数据之后对数据进行调整


三、电子表格宏示例

1、客户端宏

(1)需求场景

在电子表格数据查询时,为了限制查询的数据量通常会添加参数来限制数据查询,默认情况下参数切换时就会自动刷新数据,当查询较慢时也会影响体验,所以使用时会设置为手动刷新,当选择完所有的参数时再手动点击刷新。但是在集成到其他系统的场景时会将原本资源的工具栏隐藏,此时就希望能在参数面板上有一个刷新按钮,选择完参数之后进行刷新。

(2)html和css知识补充

在浏览器上展示的网页实际上是由html标签、css样式表、JS代码组成的。

(3)代码示例
类型对象事件
ClientSide(客户端宏)spreadsheetReportonRenderReport(打开报表后)
function main(spreadsheetReport) {
    // 获取电子表格参数面板
    var paramTable = spreadsheetReport.paramPanelObj.layoutTable;
​
    var lastCell;
    // 在参数同一行添加按钮
    for (i = 0; i < paramTable.rows.length; i++) {
        cell = paramTable.rows[i].insertCell(-1);
        if (i == paramTable.rows.length - 1)
            lastCell = cell;
    }
    
    if(!lastCell) {
        return;
    }
    
    if (!spreadsheetReport._newBtn) { // 不重复添加按钮
        // 创建按钮标签
        var input = document.createElement("INPUT");
        input.type = "button";
        input.value = "查询";
        input.title = "查询";
        input.style.width = "100px";
        input.style.height = "25px";
        var newBtn = lastCell.appendChild(input);
        spreadsheetReport.addListener(input, "click", doNewButtonClick,
            spreadsheetReport);
        spreadsheetReport._newBtn = newBtn;
    }
​
    // 新添加按钮Click事件处理函数
    function doNewButtonClick(e) {
        spreadsheetReport.doRefresh();
    }
}


2、服务端宏

(1)需求场景

在电子表格开发过程中,通常会存在表格内某些字段的数据比较敏感,希望能限制用户只允许查看不允许导出,用来保护报表中的敏感数据不会被导出后随意传播。

(2)代码示例
类型对象事件
ServerSide(服务端宏)spreadsheetReportonBeforeOutput(在输出结果前)
function main(spreadsheetReport) {
    //获取当前sheet,从0开始计数
    var sheet = spreadsheetReport.workbook.getWorksheets().get(0);
​
    var type = spreadsheetReport.outputType; //导出类型
    logger.info(type)
    if (type != "refresh") {
        sheet.cells.deleteColumn(3);
        sheet.cells.deleteColumn(3);
    }
}


四、电子表格宏接口

1、概述

2、客户端宏接口

接口文档:https://wiki.smartbi.com.cn//api/macroapi/

类名描述
application提供应用程序和当前会话的相关信息和功能访问接口,同时作为宏执行环境的顶层对象
chart图形渲染对象
chartView客户端图形浏览对象
event当前的事件对象
param参数对象
pointECharts图形点击对象
simpleReport即席查询对象
simpleReportContext即席查询的上下文对象
simpleReportGrid即席查询的表格对象
spreadsheetReport电子表格对象
spreadsheetReportChart电子表格Excel图形对象
spreadsheetReportChartPoint电子表格Excel图形数据点对象
spreadsheetReportCommand电子表格命令对象
spreadsheetReportWriteBack电子表格回写对象

包含关系图:

五、视频教学

电子表格宏入门:https://my.smartbi.com.cn/edu/course-133