6月上旬内容更新提醒 | 助你技能飞跃

小提示:点击标题即可跳转,5分钟轻松掌握一个技能。(参与互动赢取麦豆,解锁更多内容)

一、实战技巧分享

电子表格性能优化实战手把手解决卡顿难题,让大数据处理快如闪电!

更多实战技巧,点击《经验分享》进行学习

二、开发技能突破

视频课《电子表格宏开发技巧 告别低效开发,打造稳定宏代码!

视频课《交互仪表盘筛选器值轮播掌握功能改造的实战技巧。

更多开发技能视频课程,点击《二次开发》进行学习

三、AI每日一学

AIChat报表助手(让数据活起来)场景及价值 → 场景价值解析

通俗的讲一下Copilot和Agent核心区别 → 对比详解

通俗介绍下MCP → 基础概念科普

通俗地讲一下在AI领域的MCP答复→ 内部结构揭秘

详细的介绍一下-Transformer → 核心原理全解读

麦粉社区
>
帖子详情

填报禁止回写

电子表格软件 发表于 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关注人数 226浏览人数
最后回复于:2025-5-28 16:37
快速回复 返回顶部 返回列表