页面树结构
转至元数据结尾
转至元数据起始

示例说明

我们有时候会直接通过报表字段值中的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();
}
  • 无标签