如何删除单元格前面未勾选的单元格内容?

How do I delete the cell content in front of cell that have not been checked?

我有单元格范围。第一列有内容。第二列有复选框。见第一张图片。 我尝试清除未选中框前面的内容。

function clearCon() {
 var ss = SpreadsheetApp;
 var sheet =ss.getActiveSpreadsheet().getSheetByName("AddData");     
 var chkVal = sheet.getRange("A29:B33").getValues();
 Logger.log(chkVal);
 Logger.log(chkVal.length);    
 for(var i=0; i<=chkVal.length; i++){
  if(chkVal[i][1] == false){
    Logger.log(i);
    sheet.getRange(28,1,i+1,1).clearContent();
    return;
   }
  }  
 }

看这张图 它不能正常工作。如何做到这一点?

您只清除了第 28 行的当前代码,因为您是 sheet.getRange(28, 1, …)。因此,在您的前向循环中,您不会向下移动行。要解决此问题,只需执行 sheet.getRange(29+i,1).clearContent().

描述

首先你的脚本和脚本图片不匹配,所以我不确定你现在使用的是哪个。

其次,您的 for 循环应该是 i<chkval.length

第三,你的for循环中不应该有return。

第四,你的sheet.getRange(29+i, 1).clearContent()

最后,如果您指定的范围内没有公式,我将使用 setValues(),如下所示。

脚本

function clearCon() {
  try {
    var ss = SpreadsheetApp.getActiveSpreadsheet();
    var sheet = ss.getSheetByName ("AddData");
    var chkval = sheet.getRange("A29:B33").getValues();
    // test for true or false
    chkval.forEach( row => row[0] = row[1] ? row[0] : '' );
    // extract column A
    chkval = chkval.map( row => row.slice(0,1) );
    console.log(chkval);
    sheet.getRange(29,1,chkval.length,1).setValues(chkval);
  }
  catch(err) {
    console.log(err);
  }
}

参考资料