Google Sheets中通过复选框实现单选功能的Apps Script问题求助
错误原因
原代码存在3个核心逻辑问题导致单选行为异常:
- 行号未做偏移转换:第一组选项位于行3~7,你预设的switch case 15分别对应行37,但代码直接将原始行号赋值给
block1,没有做行号-2的偏移转换,导致绝大多数行号无法匹配到对应处理逻辑 - 跨组变量未定义触发提前终止:编辑第一组行时
block2未赋值,执行到block2的switch语句时会命中default分支直接return,第一组的处理逻辑即使匹配也无法生效;编辑第二组行时同理,未定义的block1会触发第一个switch的default分支提前终止 - 第二组行号逻辑同样缺失偏移:第二组选项位于行10~13,对应case 1~4需要做
行号-9的偏移转换,原代码直接赋值原始行号完全无法匹配到对应case
修正后代码
/** * onEdit to uncheck checkboxes as required */ function onEdit(e) { // get event object data: sheet name, row number and column number const sheet = e.range.getSheet(); if(sheet.getName()!='questions'){return} const row = e.range.rowStart; const col = e.range.columnStart; // 仅处理B列的复选框编辑 if(col!== 2) return; // 处理第一组题目:行3~7 if(row >=3 && row <=7) { const offset = row - 2; switch(offset) { case 1: sheet.getRange("B4:B7").uncheck(); break; case 2: sheet.getRangeList(["B3","B5:B7"]).uncheck(); break; case 3: sheet.getRangeList(["B3:B4","B6:B7"]).uncheck(); break; case 4: sheet.getRangeList(["B3:B5","B7"]).uncheck(); break; case 5: sheet.getRange("B3:B6").uncheck(); break; } return; } // 处理第二组题目:行10~13 if(row >=10 && row <=13) { const offset = row - 9; switch (offset) { case 1: sheet.getRange("B11:B13").uncheck(); break; case 2: sheet.getRangeList(["B10","B12:B13"]).uncheck(); break; case 3: sheet.getRangeList(["B10:B11","B13"]).uncheck(); break; case 4: sheet.getRange("B10:B12").uncheck(); break; } return; } }
内容的提问来源于stack exchange,提问作者bowow99
相关产品推荐
相关产品推荐

