本文档的示例代码仅适用于本文档中的示例报表/场景。若实际报表/场景与示例代码无法完全适配(如使用功能不一致,或多个宏代码冲突等),需根据实际需求开发代码。 |
在固定式的电子表格中,有许多的行数据,当拥有不同角色的用户登录时,查看的行是不相同的。
比如,电子表格报表设计如下:
类型 | 对象 | 事件 |
---|---|---|
ServerSide | spreadsheetReport | onBeforeOutput |
function main(spreadsheetReport) { spreadsheetReport.cacheable = false; //获取工作sheet var workbook = spreadsheetReport.workbook; var worksheet1 = workbook.getWorksheets().get(0); var src_cells1 = worksheet1.getCells(); var src_rows1 = src_cells1.rows.count; if (worksheet1 != null) { //获取当前用户 var user = spreadsheetReport.remoteInvoke("UserService", "getCurrentUser", "[]"); //通过名称获取角色 var role = spreadsheetReport.remoteInvoke("UserService", "getRoleByName", "[质量管理角色]"); var role2 = spreadsheetReport.remoteInvoke("UserService", "getRoleByName", "[人力角色]"); var usObj = eval('(' + user + ')'); var roObj = eval('(' + role + ')'); var roObj2 = eval('(' + role2 + ')'); var userId = usObj.result.id; var roleId = roObj.result.id; var roleId2 = roObj2.result.id; //通过用户ID和角色ID判断是否有这个角色 var flag = spreadsheetReport.remoteInvoke("UserService", "hasRoleByUserId", "[" + userId + "," + roleId + "]"); var flag2 = spreadsheetReport.remoteInvoke("UserService", "hasRoleByUserId", "[" + userId + "," + roleId2 + "]"); var f = eval('(' + flag + ')'); var f2 = eval('(' + flag2 + ')'); var f_obj = f.result; var f_obj2 = f2.result; //若用户拥有角色"质量管理角色" if (f_obj) { var worksheet2 = workbook.getWorksheets().get(1); //获取sheet2,从0开始计数 var src_cells2 = worksheet2.getCells(); var src_rows2 = src_cells2.rows.count; var role_value = src_cells2.get("A" + 1).getValue(); //获取A1单元格的值 //判断sheet2中A1单元格是否是"质量管理角色",并通过sheet2中该角色拥有的行,在sheet1中删除该角色没有权限的行 if (role_value == "质量管理角色") { var rows = {}; var columnIndex = 0; //该角色显示的行 for (var j = 1; j <= src_rows2; j++) { var v = src_cells2.get(j, columnIndex).getValue(); //从sheet2中A列的第二行开始,获取该角色拥有的行 if (v) { rows[v] = true; } } for (var i = src_rows1 - 1; i >= 2; i--) { //根据sheet2中A列角色拥有的行,设置sheet1中哪些行应该存在 var value = src_cells1.get(i, 2).getValue(); if (!rows[value]) { src_cells1.deleteRow(i); } } } } //判断sheet3中A1单元格是否是"人力角色",并通过sheet3中该角色拥有的行,在sheet1中删除该角色没有权限的行 if (f_obj2) { var worksheet3 = workbook.getWorksheets().get(2); var src_cells3 = worksheet3.getCells(); var src_rows3 = src_cells3.rows.count; var role_value3 = src_cells3.get("A" + 1).getValue(); if (role_value3 == "人力角色") { var rows = {}; var columnIndex = 0; //该角色显示的行 for (var j = 1; j <= src_rows3; j++) { var v = src_cells3.get(j, columnIndex).getValue(); if (v) { rows[v] = true; } } for (var i = src_rows1 - 1; i >= 2; i--) { var value = src_cells1.get(i, 2).getValue(); if (!rows[value]) { src_cells1.deleteRow(i); } } } } } } |
示例资源下载
资源下载:migrate-示例资源.xml