示例说明
我们有时候会直接通过报表字段值中的URL做打开的连接地址。效果如下:
设置方法
1、首先在电子表格设计器(Microsoft Office Excel)中,创建电子表格报表。
2、在浏览器的资源定制节点下,选中电子表格,右键选择 编辑宏 进入报表宏界面。
3、在报表宏界面新建服务器端模块。在弹出的新建模块对话框中,选择对象为spreadSheetReport、事件为onBeforeOutput、并把下面宏代码复制到代码编辑区域。
4、在报表宏界面新建客户端模块。在弹出的新建模块对话框中,选择对象为spreadSheetReport、事件为onLinkClick、并把下面宏代码复制到代码编辑区域。
服务器宏类型
类型 | 对象 | 事件 |
---|---|---|
ClientSide | spreadsheetReport | onBeforeOutput |
服务器宏代码
function main(spreadsheetReport) { if (!spreadsheetReport) return spreadsheetReport; var sheet = spreadsheetReport.getSheetByName("Sheet1"); var positions = "B3".split(","); for (var i = 0; i < positions.length; i++) { var position = positions[i].trim(); var expandedPositions = sheet.getExpandedPositions(position); for (var j = 0; j < expandedPositions.length; j++) { var cell = sheet.getCell(expandedPositions[j]); if (true) { addLink(spreadsheetReport, sheet, cell); } } } } function addLink(spreadsheetReport, sheet, cell) { sheet.addRuleLink(cell.cellPosition, "jump", [getCellValue(cell) ]); } function getCellValue(cell) { if (!cell) return null; if (typeof cell.length == 'number') { var ret = []; for (var i = 0; i < cell.length; i++) { ret.push(cell[i].value); } return ret; } else { return cell.value; } } function checkValue(v1, v2, op) { if (v1 && typeof v1.length == 'number') { for (var i = 0; i < v1.length; i++) { if (checkValue(v1[i], v2, op)) return true; } return false; } switch (op) { case 'EQUAL': return (v1 == v2) || (v2.match(/^\d+(\.\d+)?$/) && v1 == parseFloat(v2)); case 'GREATER': return v1 > parseFloat(v2); case 'LESS': return v1 < parseFloat(v2); case 'INCLUDE': return v1.indexOf(v2) >= 0; case 'PREFIX': return v1.indexOf(v2) == 0; case 'SUFFIX': return v1.indexOf(v2) == (v1.length - v2.length); } }
客户端宏类型
类型 | 对象 | 事件 |
---|---|---|
ClientSide | spreadsheetReport | onLinkClick |
客户端宏代码
function main(spreadsheetReport, ruleName, params) { if (ruleName != "jump") return; openURL(params[0], [], "", ""); } function paramToString(v) { return v == null ? null: v.toString(); }