一、概述
1、电子表格宏简介
电子表格常用于制作自动化报表,在电子表格上配置的样式无法满足需求,或希望对报表进行特殊的调整时,比如调整展现样式,增加功能按钮等,都可以使用电子表格宏对报表进行处理。
2、操作入口
资源树入口
excel入口
需发布资源之后才能进行设置
宏代码库
路径:运维设置->全局资源定义->宏代码库
能批量设置应用宏代码的报表,但是需要宏代码有较强的兼容性
二、电子表格宏模块
1、类型
客户端宏
客户端宏可以修改报表的展现效果,因为代码是在客户端浏览器端上运行,且仅在页面展示时生效,导出时不生效,所以称为客户端宏
服务端宏
服务端宏表示宏的事件在服务端(应用服务器)进行处理,所以可以实现客户端宏不能实现的效果,如报表导出生效等。
2、对象
客户端宏
spreadsheetReport
:电子表格对象chart
:图形对象
服务端宏
spreadsheetReport
:电子表格对象
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 | 点击图形对象时触发 |
服务端宏
不管选择什么宏事件main函数中仅有
spreadsheetReport
电子表格对象作为参数
事件 | 解释 | 适用场景 |
---|---|---|
onBeforeOutput | 在输出结果前 | 常用输出表格之前改写电子表格输出结果 |
onAfterGetGridData | 在获取数据后 | 常用于获取数据之后对数据进行调整 |
三、电子表格宏示例
1、客户端宏
(1)需求场景
在电子表格数据查询时,为了限制查询的数据量通常会添加参数来限制数据查询,默认情况下参数切换时就会自动刷新数据,当查询较慢时也会影响体验,所以使用时会设置为手动刷新,当选择完所有的参数时再手动点击刷新。但是在集成到其他系统的场景时会将原本资源的工具栏隐藏,此时就希望能在参数面板上有一个刷新按钮,选择完参数之后进行刷新。
(2)html和css知识补充
在浏览器上展示的网页实际上是由html标签、css样式表、JS代码组成的。
htlm:浏览器上展示的内容需要html标签来承载,可以理解为网页的内容骨架
css样式表:样式表顾名思义是给html标签添加样式,如颜色、字体、显示位置等
JS代码:可以动态控制html和css,同时也可以处理于浏览器与用户交互的功能。
(3)代码示例
宏模块
类型 | 对象 | 事件 |
---|---|---|
ClientSide(客户端宏) | spreadsheetReport | onRenderReport(打开报表后) |
示例代码
代码块 | ||
---|---|---|
| ||
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(); } } |
关键对象方法
获取电子表格参数面板的dom元素:spreadsheetReport.paramPanelObj.layoutTable
给某行参数后面新增一个单元格值:paramTable.rows[i].insertCell(-1)
创建一个空按钮:document.createElement("INPUT")
在新增的单元格里写入按钮的标签:lastCell.appendChild(input);
给按钮添加点击事件:spreadsheetReport.addListener(input, "click", doNewButtonClick,spreadsheetReport);
刷新电子表格:spreadsheetReport.doRefresh();
参考示例
2、服务端宏
(1)需求场景
在电子表格开发过程中,通常会存在表格内某些字段的数据比较敏感,希望能限制用户只允许查看不允许导出,用来保护报表中的敏感数据不会被导出后随意传播。
(2)代码示例
宏模块
类型 | 对象 | 事件 |
---|---|---|
ServerSide(服务端宏) | spreadsheetReport | onBeforeOutput(在输出结果前) |
示例代码
代码块 | ||
---|---|---|
| ||
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); } } |
关键对象方法
获取电子表格分组表sheet页:spreadsheetReport.workbook.getWorksheets().get(0)
获取电子表格当前输出类型:spreadsheetReport.outputType
删除整列数据:sheet.cells.deleteColumn(4)
参考示例
四、电子表格宏接口
1、概述
客户端宏
客户端宏运行在浏览器的客户端,宏代码是用JavaScript来进行编写的,所以提供的接口也是JavaScript的接口。编写客户端宏时需要遵循JavaScript的语法规范
服务端宏
服务端宏使用了Rhino工具包,让产品的Java代码中可以运行写好的JavaScript程序,同时在JavaScript程序中也可以调用到Java类,其编写时也需要遵循JavaScript的语法规范。
2、客户端宏接口
接口文档:https://wiki.smartbi.com.cn//api/macroapi/
类名 | 描述 |
---|---|
提供应用程序和当前会话的相关信息和功能访问接口,同时作为宏执行环境的顶层对象 | |
图形渲染对象 | |
客户端图形浏览对象 | |
当前的事件对象 | |
参数对象 | |
ECharts图形点击对象 | |
即席查询对象 | |
即席查询的上下文对象 | |
即席查询的表格对象 | |
电子表格对象 | |
电子表格Excel图形对象 | |
电子表格Excel图形数据点对象 | |
电子表格命令对象 | |
电子表格回写对象 |
包含关系图: