我正在尝试获取一个复选框以在其所在的行上运行一个脚本。它需要循环穿过指定的工作表中的所有行。
如果在F列中选中了复选框,我想安排一个脚本以清除列B-F。
b是一个应该设置为false的复选框C是验证的数据输入D是数据验证的输入E是依赖于C和D的数据的公式。
应保留公式。f为true是触发复选框
如果检查f,则在B,C,D,F中清除内容(因为它是公式,因此不应清除E(
我尝试从这里和其他链接修改脚本而没有成功:
将复选框重置为false
如果选中了复选框,使用脚本从Google Sheep中的行生成文档
Google表脚本以隐藏行,如果检查复选框
function try_It(){
deleteRow(5); //// choose col = 2 for column C, 5 for F
}
function deleteRowContents (col){ // col is the index of the column to check for checkbox being true
var sh = SpreadsheetApp.getActiveSheet();
var data = sh.getDataRange().getValues();
var targetData = new Array();
for(n=0;n<data.length;++n){
if(data[n][col]!="TRUE" && data[n][col]!="FALSE"){ targetData.push(data[n])};
}
Logger.log(targetData);
sh.getDataRange().clear();
sh.getRange(1,1,targetData.length,targetData[0].length).setValues(targetData);
}
预期结果:如果检查列F,请在同一行中清除B:F。(我知道上面的此脚本甚至还不接近完成(。
实际结果:这删除了整个纸上的所有格式。即使在F列中,它也无法正确清除范围。
- 当列的复选框" f"为
true
时,您想将" B"列的值清除为" D"和列" F"。- 在这种情况下,您想将复选框更改为
false
。
- 在这种情况下,您想将复选框更改为
- 您不想清除单元格式。
如果我的理解是正确的,那么这种修改怎么样?请将其视为几种解决方案之一。修改后的脚本的流量如下。
- 创建范围列表以删除从检索的值中删除列。
- 清除范围列表的内容。
修改后的脚本:
function deleteRowContents (col){ // col is the index of the column to check for checkbox being true
var col = 6; // If the column "F" is 6, please set 6.
var sh = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Sheet4"); // Modified
var data = sh.getDataRange().getValues();
// Below script was modified.
var deleteRanges = data.reduce(function(ar, e, i) {
if (e[col - 1] === true) { // Modified
return ar.concat(["B" + (i + 1) + ":D" + (i + 1), "F" + (i + 1)]);
}
return ar;
}, []);
if (deleteRanges.length > 0) { // or if (deleteRanges.length) { // Added
sh.getRangeList(deleteRanges).clearContent();
}
}
参考:
- 类Rangelist
- clearContent((
如果我误解了您的问题,这不是您想要的结果,我深表歉意。