四月上旬新内容速递丨技术深潜、图表进阶与AI热词

春意正浓,学习升温!四月上旬更新聚焦技术拓展、图表新解、AI热点与实战任务,助你在数据探索之路上步步为营,智取未来!

一、场景应用精选

【热力图】数据的“温度计”与分布探测器》→热力图在业务分布与浓度识别中的实战应用。
【数析课堂】排序法:业务人员的“数据理线器”》→排序法助力业务数据梳理,提升分析效率。
【关系图】解锁数据背后的“隐形网络”与关联密码》→关系图在复杂关联分析中的深度应用。
【数析课堂】让数据开口说话:职场人的“图形法”生存指南》→图形法职场实战指南,轻松驾驭数据表达。

二、技术经验分享

降维打击!Smartbi仪表盘隐藏ECharts玩法大揭秘》→解锁仪表盘高阶玩法,用ECharts实现可视化降维创新。
“数”转乾坤:数据转换规则变形记》→深入数据转换规则,掌握数据变形与流转的核心技巧。

三、AI知识更新

【AI每日一学】简要介绍一下最近AI圈很火的“养龙虾”话题》→每日一学,快速理解AI圈热门话题“养龙虾”。
【AI每日一学】讲一下最近AI圈很火的“养龙虾”话题中一直被提及的skill》→深度解析“养龙虾”中的关键技能概念,紧跟AI前沿。

四、全新素材上线

指标元素动态图(二)》→新增指标动态图素材,丰富仪表盘视觉表现力。

五、官方通知更新

2026年「月更日志」社区更新合集 3.1 - 3.31》→回顾三月社区更新动态,掌握平台最新进展。
春日如约而至:2026年第一季度任务通关排行榜请查收!》→揭晓Q1任务通关榜单,激励持续学习与挑战。

六、任务持续上线

【AI知识巩固】简要介绍一下最近AI圈很火的“养龙虾”话题》→追踪AI圈最新热词,轻松入门“养龙虾”现象。
【图表应用】热力图:数据的“温度计”与分布探测器》→学习热力图制作,让数据热度一目了然。
【BI知识闯关】降维打击!Smartbi仪表盘隐藏ECharts玩法大揭秘》→实战闯关,巩固仪表盘隐藏技能。
【数析课堂】排序法知识巩固》→掌握排序分析法,梳理数据层级关系。
【图表应用】关系图:挖掘数据背后的“隐形关系网”》→学习关系图绘制,发现数据间的隐秘关联。
【BI知识闯关】重生之如何找SQL看数据不对问题(上)》→SQL排错实战,提升数据校验能力。
【BI知识闯关】“数”转乾坤:数据转换规则变形记》→闯关巩固数据转换规则应用。
【AI知识巩固】讲一下最近AI圈很火的“养龙虾”话题中一直被提及的skill》→深入“养龙虾”背后的技能概念,拓展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关注人数 1407浏览人数
最后回复于:2025-5-28 16:37

社区

指南

AI

搜索

快速回复 返回顶部 返回列表