页面树结构

版本比较

标识

  • 该行被添加。
  • 该行被删除。
  • 格式已经改变。

...

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点击图形对象时触发
  • 服务端宏

    • 不管选择什么宏事件main函数中仅有spreadsheetReport电子表格对象作为参数

事件解释适用场景
onBeforeOutput在输出结果前常用输出表格之前改写电子表格输出结果
onAfterGetGridData在获取数据后常用于获取数据之后对数据进行调整


三、电子表格宏示例

1、客户端宏

(1)需求场景

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

...

  • htlm:浏览器上展示的内容需要html标签来承载,可以理解为网页的内容骨架

  • css样式表:样式表顾名思义是给html标签添加样式,如颜色、字体、显示位置等

  • JS代码:可以动态控制html和css,同时也可以处理于浏览器与用户交互的功能。

(3)代码示例
  • 宏模块

类型对象事件
ClientSide(客户端宏)spreadsheetReportonRenderReport(打开报表后)
  • 示例代码

代码块
languagejs
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)代码示例
  • 宏模块

类型对象事件
ServerSide(服务端宏)spreadsheetReportonBeforeOutput(在输出结果前)
  • 示例代码

代码块
languagejs
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);
    }
}

...

接口文档: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