You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.06 02:51:00