我试图获得一个复选框,以在其所在的行上运行脚本。它需要遍历指定工作表中的所有行。
如果在F列中选中了一个复选框,我想安排一个脚本来清除B-F列。
B是应设置为FALSE的复选框 C是经过数据验证的输入 D是数据验证输入 E是一个依赖C和D中数据的公式。该公式应保留。
F为真是触发复选框
如果选中F,则清除B,C,D,F中的内容(由于是公式,因此不应该清除E)
我尝试从此处和其他链接修改脚本没有成功:
Using a script to generate docs from rows in Google Sheet if checkbox is checked
Google Sheets Script to Hide Row if Checkbox Checked
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列复选框中,它也无法正确清除范围。
答案 0 :(得分:1)
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();
}
}
如果我误解了您的问题,而这不是您想要的结果,我深表歉意。