六月下旬全新资源上线!丨 解锁高效能实战方案

更新亮点:本次新增6大专题10项资源,更有王炸课程重磅登场,点击标题了解!(参与互动赢取麦豆,解锁更多内容)

王炸专区:场景化数据分析实战

一站式贯通数据驱动全流程,从需求洞察→数仓开发→模型构建→可视化呈现,手把手带你构建决策引擎,助你秒变企业决策智多星!

二、实战技巧分享

即席/透视的逆袭之路:从卡顿到秒出→ 性能优化实战,实现报表秒级响应!

体验中心焕新一“夏”,全新导览页及新DEMO上线!→ 抢先体验夏季更新DEMO!

速看!明细/汇总/交叉表的实现秘籍→ 高效构建复杂报表指南

三、开发技能突破

视频课《仪表盘图片鼠标提示几行代码,让你的仪表盘“会说话”!

视频课《仪表盘宏开发技巧→ 解锁宏开发技巧和注意事项

四、直播上线

直播《交互式仪表盘最佳实践解锁可视化大屏最佳实践技巧

五、AI每日一学

人工智能三驾马车:算法、算力与数据→ 深度解析AI核心支柱

通俗的讲一下神经网络模型的基本组成、工作原理、工作类型和生活应用场景→ 从基础到场景实战

六、资源上新

插件《安全检测→ 一键加固系统安全防护

麦粉社区
>
帖子详情

填报禁止回写

电子表格软件 发表于 2025-5-28 11:14
发表于 2025-5-28 11:14:00
本帖最后由 kc 于 2025-5-28 11:42 编辑

我有两个sheet都是填报的电子表格,现在想通过每个sheet中的L1单元格判断是否为1,去禁止填写,两个sheet的L1值可能不一样,现在代码可以实现控制第二个sheet的回写,但是第一个只能控制前后几行,求助各位大佬帮忙看看是哪里有问题,感谢!!!


服务端:


function main(spreadsheetReport) {

   
    // 获取电子表格所有sheet对象,0表示第一个sheet,1表示第二个,2表示第三个
    var sheet1 = spreadsheetReport.workbook.getWorksheets().get(0);     
    var value1 = sheet1.getCells().getCell(0, 11).value;  // getCell(0, 11),表示获取L1单元格第1行,第12列的单元格的值
    spreadsheetReport.customProperties.put("LValue1", value1);

    var sheet11 = spreadsheetReport.sheets[0];
    var posList1 = sheet11.getExpandedPositions("F4"); //获取F4单元格拓展出来的最大行数
    spreadsheetReport.customProperties.put("maxrow1", posList1.length);
   

   
    // 获取电子表格所有sheet对象,0表示第一个sheet,1表示第二个,2表示第三个
    var sheet2 = spreadsheetReport.workbook.getWorksheets().get(1);     
    var value2 = sheet2.getCells().getCell(0, 11).value;  // getCell(0, 11),表示获取L1单元格第1行,第12列的单元格的值
    spreadsheetReport.customProperties.put("LValue2", value2);

    var sheet22 = spreadsheetReport.sheets[1];
    var posList2 = sheet22.getExpandedPositions("5"); //获取F4单元格拓展出来的最大行数
    spreadsheetReport.customProperties.put("maxrow2", posList2.length);

}




客户端:


function main(spreadsheetReport) {
   
    var customProperties = spreadsheetReport.elemSheetFrame.contentWindow.customProperties;
    var cells = spreadsheetReport.elemSheetFrame.contentWindow;
    var writableMap = cells.writableMap;

    var targetCols1 = ["5", "6", "7"];
               
    // 获取开始行数
    var startRow1 = 3;  // 第四行对应索引3
    // 获取最大数据行数
    var maxRow1 = customProperties["maxrow1"] + 100;

    for (var row1 = startRow1; row1 <= maxRow1; row1++) {
        var LValue1 = customProperties["LValue1"]
        // alert(LValue1);

        if (LValue1 == "1" || LValue1 == 1) {
            // 禁止回写逻辑
            targetCols1.forEach(function(col) {
                var colKey = row1 + ":" + col;  // 格式:"*:5" 表示所有行的第6列
                // alert(colKey)
                if (writableMap[colKey] && !writableMap["bak." + colKey]) {
                    writableMap["bak." + colKey] = writableMap[colKey];  // 备份原始状态
                    delete writableMap[colKey];                          // 禁用回写
                }
            });
        } else {
            // 恢复回写逻辑
            targetCols1.forEach(function(col) {
                var colKey = row1 + ":" + col;
                // alert(colKey)
                if (writableMap["bak." + colKey]) {
                    writableMap[colKey] = writableMap["bak." + colKey];  // 恢复原始状态
                    delete writableMap["bak." + colKey];                  // 清除备份
                }
            });
        
        }
    }
   

    var targetCols2 = ["1", "2", "3", "4", "5", "6","7", "8", "9", "10", "11", "12", "13", "14", "15", "16", "17", "18", "19"];
               
    // 获取开始行数
    var startRow2 = 4;  // 第四行对应索引3
    // 获取最大数据行数
    var maxRow2 = customProperties["maxrow2"] + 50;

    for (var row2 = startRow2; row2 <= maxRow2; row2++) {
        var LValue2 = customProperties["LValue2"]
        // alert(LValue2);

        if (LValue2 == "1" || LValue2 == 1) {
            // 禁止回写逻辑
            targetCols2.forEach(function(col) {
                var colKey = row2 + ":" + col;  // 格式:"*:5" 表示所有行的第6列
                // alert(colKey)
                if (writableMap[colKey] && !writableMap["bak." + colKey]) {
                    writableMap["bak." + colKey] = writableMap[colKey];  // 备份原始状态
                    delete writableMap[colKey];                          // 禁用回写
                }
            });
        } else {
            // 恢复回写逻辑
            targetCols2.forEach(function(col) {
                var colKey = row2 + ":" + col;
                // alert(colKey)
                if (writableMap["bak." + colKey]) {
                    writableMap[colKey] = writableMap["bak." + colKey];  // 恢复原始状态
                    delete writableMap["bak." + colKey];                  // 清除备份
                }
            });
        
        }
    }
   
}
发表于 2025-5-28 11:18:16
88713683680706332a.png
776466836805a7217e.png
4089968368062e8464.png
回复

使用道具 举报

发表于 2025-5-28 14:57:51

已解决,增加sheet页的判断


function main(spreadsheetReport) {
    var win = spreadsheetReport.elemSheetFrame.contentWindow;
    var writableMap = win.writableMap;
    var customProperties = win.customProperties;
   
    var sheetIndex = spreadsheetReport.currentSheetIndex;//获取当前sheet页序号,从0开始
   
   if(sheetIndex==0){
    // alert("当前sheet页="+sheetIndex);
   
    // ========================= Sheet1:"家中、CP、RA" =========================
    var targetCols1 = ["5", "6", "7"]; // F-H 列(索引从0开始)
    var startRow1 = 3;                  // 起始行(第4行)
    var maxRow1 = (customProperties["maxrow1"] || 0) + 100; // 扩展行范围
    var LValue1 = customProperties["LValue1"];

    for (var row1 = startRow1; row1 <= maxRow1; row1++) {
        targetCols1.forEach(function(col) {
            var key1 = row1 + ":" + col;
            var backupKey = "sheet1_bak_" + key1; // 独立备份键
            if (LValue1 == "1" || LValue1 == 1) {
                if (writableMap[key1] && !writableMap[backupKey]) {
                    writableMap[backupKey] = writableMap[key1];
                    delete writableMap[key1];
                }
            } else {
                if (writableMap[backupKey]) {
                    writableMap[key1] = writableMap[backupKey];
                    delete writableMap[backupKey];
                }
            }
        });
    }


   }else if(sheetIndex==1){
    // alert("当前sheet页="+sheetIndex);
     
    // ========================= Sheet2:"地产、大项" =========================
    var targetCols2 = ["1", "2", "3", "4", "5", "6","7", "8", "9", "10", "11", "12", "13", "14", "15", "16", "17", "18", "19"]; // B-T 列
    var startRow2 = 4;                   // 起始行(第5行)
    var maxRow2 = (customProperties["maxrow2"] || 0) + 50; // 更大的行范围
    var LValue2 = customProperties["LValue2"];

    for (var row2 = startRow2; row2 <= maxRow2; row2++) {
        targetCols2.forEach(function(col) {
            var key2 = row2 + ":" + col;
            var backupKey = "sheet2_bak_" + key2; // 独立备份键
            if (LValue2 == "1" || LValue2 == 1) {
                if (writableMap[key2] && !writableMap[backupKey]) {
                    writableMap[backupKey] = writableMap[key2];
                    delete writableMap[key2];
                }
            } else {
                if (writableMap[backupKey]) {
                    writableMap[key2] = writableMap[backupKey];
                    delete writableMap[backupKey];
                }
            }
        });
    }
   }
   
   
}

 

回复

使用道具 举报

发表于 2025-5-28 16:37:45
帅帅帅,学习学习
回复

使用道具 举报

高级模式
B Color Image Link Quote Code Smilies
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

3回帖数 0关注人数 271浏览人数
最后回复于:2025-5-28 16:37
快速回复 返回顶部 返回列表