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

提示:本文档的示例代码仅适用于本文档中的示例报表/场景。若实际报表/场景与示例代码无法完全适配(如使用功能不一致,或多个宏代码冲突等),需根据实际需求开发代码。

示例说明

在回写时,可能需要根据某个值判断另一个单元格是否允许回写,具体可以参考下面这个例子。

当平铺参数选择“是”,则允许回写,

当平铺参数选择“否”,则不允许回写,


版本及客户端说明

1.版本:最新版本

2.PC端

3.浏览器:IE、Chrome、Firefox

设置方法

1.创建电子表格
首先在电子表格设计器中,创建电子表格报表。


2.设置填报属性
设置C2单元格的填报属性绑定一个平铺面板参数


设置E2单元格的填报属性为文本





3.进入宏界面

选中电子表格,右键选择 编辑宏 进入报表宏界面


4.创建客户端宏

在报表宏界面新建客户端模块。在弹出的新建模块对话框中,选择对象为spreadsheetReport、事件为onRenderReport、并把下面宏代码复制到代码编辑区域。

宏类型

类型

对象

事件

客户端宏

spreadsheetReportonRenderReport

宏代码

function main(spreadsheetReport) {
    spreadsheetReport.spreadsheetReportWriteBack.updateWriteBackData_old = spreadsheetReport.spreadsheetReportWriteBack.updateWriteBackData;
    spreadsheetReport.spreadsheetReportWriteBack.updateWriteBackData = function(sheetIndex, position, td, oldValue, value, displayValue, type) {
        var cell = spreadsheetReport.elemSheetFrame.contentWindow.writableMap[position];
        if (cell.cell == "C2") { //判断当前回写的单元格是不是C2
            if (value == "否") { //判断C2单元格的值是不是"否"
                //要设置不可回写的单元格在示例中是E2,其坐标为(1,4),因此下面代码中需要对writableMap中[1:4]进行设置
                if (spreadsheetReport.elemSheetFrame.contentWindow.writableMap["1:4"]) {
                    spreadsheetReport.elemSheetFrame.contentWindow.writableMap["bak.1:4"] = spreadsheetReport.elemSheetFrame.contentWindow.writableMap["1:4"];
                    delete spreadsheetReport.elemSheetFrame.contentWindow.writableMap["1:4"];
                }
            } else {
                if (spreadsheetReport.elemSheetFrame.contentWindow.writableMap["bak.1:4"]) {
                    spreadsheetReport.elemSheetFrame.contentWindow.writableMap["1:4"] = spreadsheetReport.elemSheetFrame.contentWindow.writableMap["bak.1:4"];
                    delete spreadsheetReport.elemSheetFrame.contentWindow.writableMap["bak.1:4"];
                }
            }
        }
        this.updateWriteBackData_old(sheetIndex, position, td, oldValue, value, displayValue, type);
    }
}


资源下载

报表资源:migrate根据单元格控制是否可填写.xml


2 评论

  1. 徐晓兰 发表:

    如果是根据参数值控制单元格的回写,可以使用:

     

    //事件:onRender,  对象:spreadsheetReport
    function main(spreadsheetReport) {
        var paramValue = spreadsheetReport.getParamValue("shipRegion");  //输入参数名称,是参数属性里面的名称属性,不是别名
        if (paramValue == "华南") { //判断D4单元格的值是不是"否"
            //要设置不可回写的单元格D4,单元格的坐标从0开始计数,其坐标为(3,3),因此下面代码中需要对writableMap中[3:3]进行设置
            if (spreadsheetReport.elemSheetFrame.contentWindow.writableMap["3:3"]) {
                delete spreadsheetReport.elemSheetFrame.contentWindow.writableMap["3:3"];
            }
        } 
    }
  2. 王梓杰 发表:

    如果是根据参数值控制扩展字段单元格的回写,可以使用:

    //服务端宏  对象:spreadsheetReport  事件:onBeforeOutput
    function main(spreadsheetReport) {
        spreadsheetReport.printExpandedPositions();//打印展开后所有单元格
    }
    //客户端宏  对象:spreadsheetReport   事件:onRender
    function main(spreadsheetReport, isAjaxRefreshCallback) {
        debugger;
        var paramValue = spreadsheetReport.getParamValue("客户名称"); //输入参数名称,是参数属性里面的名称属性,不是别名
        if (paramValue == "老王") { //判断单元格的值
            //设置不可回写的扩展列
            var Pos = spreadsheetReport.getExpandedPositions("K6");
            for (var i = 0; i < Pos.length; i++) {
                var cell = spreadsheetReport.getCell(Pos[i]);
                var position = spreadsheetReport.parseCellIndex(Pos[i]);
                if (position) {
                    var row = position[0];
                    var colunm = position[1];
                    var p = row + ":" + colunm;
                    if (spreadsheetReport.elemSheetFrame.contentWindow.writableMap[p]) {
                        delete spreadsheetReport.elemSheetFrame.contentWindow.writableMap[p];
                    }
                }
            }
        }
    }