Google 页水平单选复选框

Google Sheets Horizontal Radio checkboxes

我正在尝试创建单选复选框,当复选框处于垂直状态时我设法使它工作,如下例 sheet 所示,标签名称 'Radio 1' 但我有另一个标签'Radio 2' 复选框水平对齐并且没有一个接一个对齐,但在每 2 个单元格之后,第一个无线电使用以下代码

 function onEdit(e) {
  if (e.range.columnStart != 2 || e.range.rowStart == 1 || e.range.rowStart > 8 || e.value != "TRUE") return;
 let r = SpreadsheetApp.getActive().getActiveSheet().getRange(2,2,7);
  let checks = r.getValues();
  for (let i in checks){
    if(checks[i][0] == true && +i != e.range.rowStart - 2)
    checks[i][0] = false;
    }
  r.setValues(checks);
}

但是在适应第二个单选标签时我无法让它工作,有什么想法吗?

sheet link

尝试

function onEdit(e) {
  var sh = e.source.getActiveSheet()
  if (sh.getName() == 'Radio 1') {
    if (e.range.columnStart != 2 || e.range.rowStart == 1 || e.range.rowStart > 8 || e.value != "TRUE") return;
    let r = SpreadsheetApp.getActive().getActiveSheet().getRange(2, 2, 7);
    let checks = r.getValues();
    for (let i in checks) {
      if (checks[i][0] == true && +i != e.range.rowStart - 2)
        checks[i][0] = false;
    }
    r.setValues(checks);
  }
  else if (sh.getName() == 'Radio 2') {
    var cel = e.source.getActiveRange()
    if (cel.getRow() == 11 && cel.getValue() == true) {
      var r = sh.getRange('H' + cel.getRow() + ':S' + cel.getRow())
      var checks = r.getValues()
      for (var i=0;i<checks[0].length;i+=2) {
        if (checks[0][i] == true && i != cel.getColumn()-8)
          if (checks[0][i]==true) {checks[0][i] = false};
      }
      r.setValues(checks);
    }
  }
}

如果您想申请 multi-rows,请更改此 cel.getRow() == 11

你的情况,下面的修改怎么样?

修改后的脚本:

在此修改中,使用了复选框的单元格范围。

function onEdit(e) {
  // This is from your sample Spreadsheet.
  // The cell ranges of checkboxes are set as A1Notation.
  const obj = {
    'Radio 1': ["B2", "B3", "B4", "B5", "B6", "B7", "B8"],
    'Radio 2': ["H11", "J11", "L11", "N11", "P11", "R11"]
  };

  const sheet = e.source.getActiveSheet();
  const sheetName = sheet.getSheetName();
  const a1Notation = e.range.getA1Notation();
  if (!obj[sheetName] || !obj[sheetName].includes(a1Notation) || e.range.getValue() === false) return;
  sheet.getRangeList(obj[sheetName].filter(e => e != a1Notation)).uncheck();
}
  • 当此脚本为 运行 时,当“Radio 1”或“Radio 2”上的复选框被选中时,其他选中的复选框将被取消选中。
  • 如要添加《广播3》等,请添加至obj

注:

  • 当您更改复选框和 sheet 名称时,请修改 obj。请注意这一点。

参考文献: