Trying to set up an onedit script for google sheet that unchecks all tickboxes in one column when a new one in the same column is ticked in.
function onEdit(e){
if(e.range.columnStart != 1 || e.value == "FALSE") return;
for(var i=1;i<100;i ){
if(i == e.range.rowStart) continue;
// Here I am trying to check if the cell has the value TRUE and if so change it to FALSE.
if(e.source.getActiveSheet().getRange(i,1).value == "TRUE"){
e.source.getActiveSheet().getRange(i,1).setValue("FALSE");
}
}
}
我正在使用 FOR 陳述句檢查單元格,并嘗試檢查它們的值是否為 TRUE,如果是,則將其更改為 FALSE。雖然它似乎沒有檢測到任何 TRUE。如果我洗掉 IF 陳述句,它會保持新選中的框處于選中狀態,但會用 FALSE 值填充整列。
我在嘗試使用 IF 陳述句檢測 TRUE 并將其更改為 FALSE 時遺漏或誤解了什么?
uj5u.com熱心網友回復:
設法解決它。我沒有檢查值 TRUE,而是嘗試使用 isChecked() 函式并且它有效。
function onEdit(e){
if(e.range.columnStart != 1 || e.value == "FALSE") return;
for(var i=1;i<100;i ){
if(i == e.range.rowStart) continue;
if(e.source.getActiveSheet().getRange(i,1).isChecked() == true){
e.source.getActiveSheet().getRange(i,1).setValue("FALSE");
}
}
}
uj5u.com熱心網友回復:
這樣應該會快一點:
function onEdit(e) {
const sh = e.range.getSheet();
if (sh.getName() != "Your Sheetname" || e.range.columnStart != 1 || e.value == "FALSE") return;
let vs = sh.getRange(1, 1, sh.getLastRow(), 1).getValues()
vs.forEach((r, i) => {if (i 1 != e.range.rowStart) { vs[i][0] = "FALSE" }});
sh.getRange(1, 1, vs.length, vs[0].length).setValues(vs);
}
如果您在一堆作業表中使用它,則可以使用:
if(!~['Sheet1','Sheet2].indexOf(sh.getName()) || e.range.columnStart != 1 || e.value == "FALSE") return;
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/365623.html
