Google 允许每行仅选择 1 个复选框,每列仅选择 3 个复选框的脚本
Google script to allow selecting only 1 checkbox per row and 3 checkboxes per column
我想在以下 Google Sheet to allow only 1 checkbox selection per row, and 3 checkboxes selected per column as maximum, as described here 上制作一个 Google 脚本。
如果在同一行上选中了 2 个复选框,则应显示弹出窗口 window,显示 "Please select only 1 checkbox per row",最后一次编辑应设置为 FALSE。如果每列选择了 3 个以上的复选框,则相同(弹出 windows 说 "This column has already 3 selections, please choose a different column",并在最后一次编辑时设置为 FALSE)。
此函数限制了每行只能检查一次,每列只能检查 3 次。您必须提供数组范围参数 A1Notation 字符串和 sheet 名称。如果您超出限制,最后一个复选框将返回到 false,您会收到祝酒词格式的警告。
function onEdit(e) {
const sh=e.range.getSheet();
if(sh.getName()=='You provide sheet name') {
const mcpr=1;
const mcpc=3;
const arrayrange='A1:C10';//You provide A1Notation range string
const arg=sh.getRange(arrayrange);
const avs=arg.getValues();
const ulr=arg.getRow();
const ulc=arg.getColumn();
const lrr=ulr+arg.getHeight()-1;
const lrc=ulc+arg.getWidth()-1;
if(e.range.columnStart<=lrc && e.range.rowStart<=lrr && e.value=="TRUE") {
let rc=avs[e.range.rowStart-ulr].filter(function(e){return e;}).reduce(function(a,v){ if(v){return a+1;} },0);
if(rc>mcpr){e.range.setValue("FALSE");e.source.toast('Sorry maximum checks per row is ' + mcpr);};
let cc=avs.map(function(r,i){return r[e.range.columnStart-ulc];}).filter(function(e){return e}).reduce(function(a,v){if(v){return a+1;}},0);
if(cc>mcpc){e.range.setValue('FALSE');e.source.toast('Sorry maximum checks per column is ' + mcpc);};
}
}
}
动画:
您的具体情况:
function onEdit(e) {
const sh=e.range.getSheet();
if(sh.getName()=='Sheet1') {
const mcpr=1;
const mcpc=3;
const arrayrange='D3:AC7';
const arg=sh.getRange(arrayrange);
const avs=arg.getValues();
const ulr=arg.getRow();
const ulc=arg.getColumn();
const lrr=ulr+arg.getHeight()-1;
const lrc=ulc+arg.getWidth()-1;
if(e.range.columnStart<=lrc && e.range.rowStart<=lrr && e.value=="TRUE") {
let rc=avs[e.range.rowStart-ulr].filter(function(e){return e;}).reduce(function(a,v){ if(v){return a+1;} },0);
if(rc>mcpr){e.range.setValue("FALSE");e.source.toast('Sorry maximum checks per row is ' + mcpr);};
let cc=avs.map(function(r,i){return r[e.range.columnStart-ulc];}).filter(function(e){return e}).reduce(function(a,v){if(v){return a+1;}},0);
if(cc>mcpc){e.range.setValue('FALSE');e.source.toast('Sorry maximum checks per column is ' + mcpc);};
}
}
}
动画:
我想在以下 Google Sheet to allow only 1 checkbox selection per row, and 3 checkboxes selected per column as maximum, as described here 上制作一个 Google 脚本。
如果在同一行上选中了 2 个复选框,则应显示弹出窗口 window,显示 "Please select only 1 checkbox per row",最后一次编辑应设置为 FALSE。如果每列选择了 3 个以上的复选框,则相同(弹出 windows 说 "This column has already 3 selections, please choose a different column",并在最后一次编辑时设置为 FALSE)。
此函数限制了每行只能检查一次,每列只能检查 3 次。您必须提供数组范围参数 A1Notation 字符串和 sheet 名称。如果您超出限制,最后一个复选框将返回到 false,您会收到祝酒词格式的警告。
function onEdit(e) {
const sh=e.range.getSheet();
if(sh.getName()=='You provide sheet name') {
const mcpr=1;
const mcpc=3;
const arrayrange='A1:C10';//You provide A1Notation range string
const arg=sh.getRange(arrayrange);
const avs=arg.getValues();
const ulr=arg.getRow();
const ulc=arg.getColumn();
const lrr=ulr+arg.getHeight()-1;
const lrc=ulc+arg.getWidth()-1;
if(e.range.columnStart<=lrc && e.range.rowStart<=lrr && e.value=="TRUE") {
let rc=avs[e.range.rowStart-ulr].filter(function(e){return e;}).reduce(function(a,v){ if(v){return a+1;} },0);
if(rc>mcpr){e.range.setValue("FALSE");e.source.toast('Sorry maximum checks per row is ' + mcpr);};
let cc=avs.map(function(r,i){return r[e.range.columnStart-ulc];}).filter(function(e){return e}).reduce(function(a,v){if(v){return a+1;}},0);
if(cc>mcpc){e.range.setValue('FALSE');e.source.toast('Sorry maximum checks per column is ' + mcpc);};
}
}
}
动画:
您的具体情况:
function onEdit(e) {
const sh=e.range.getSheet();
if(sh.getName()=='Sheet1') {
const mcpr=1;
const mcpc=3;
const arrayrange='D3:AC7';
const arg=sh.getRange(arrayrange);
const avs=arg.getValues();
const ulr=arg.getRow();
const ulc=arg.getColumn();
const lrr=ulr+arg.getHeight()-1;
const lrc=ulc+arg.getWidth()-1;
if(e.range.columnStart<=lrc && e.range.rowStart<=lrr && e.value=="TRUE") {
let rc=avs[e.range.rowStart-ulr].filter(function(e){return e;}).reduce(function(a,v){ if(v){return a+1;} },0);
if(rc>mcpr){e.range.setValue("FALSE");e.source.toast('Sorry maximum checks per row is ' + mcpr);};
let cc=avs.map(function(r,i){return r[e.range.columnStart-ulc];}).filter(function(e){return e}).reduce(function(a,v){if(v){return a+1;}},0);
if(cc>mcpc){e.range.setValue('FALSE');e.source.toast('Sorry maximum checks per column is ' + mcpc);};
}
}
}
动画: