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);
}
但是在适应第二个单选标签时我无法让它工作,有什么想法吗?
尝试
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
。请注意这一点。
参考文献:
我正在尝试创建单选复选框,当复选框处于垂直状态时我设法使它工作,如下例 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);
}
但是在适应第二个单选标签时我无法让它工作,有什么想法吗?
尝试
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
。请注意这一点。