识别并删除列中第一个选中的复选框 [Google Sheets]

Identify and delete the first checked checkbox in a column [Google Sheets]

这是我目前所拥有的,但没有成功 运行,我无法确定原因:

    var values = Today.getRange('C6:C').getValues();
    var a = 0;
      while (a<=values.length){
        if ( values[a][0] == "True" ) {   
          Today.deleteRow(a+6);           //Here I add 6 to 'a' since the range 'values' started from row 6.
        }
      a++    //Increase 'a' by 1 and continue.
      }
  • 您想删除在 "Today" 的 sheet 名称上选中列 "C" 复选框的行。
  • 勾选 "C6:C"。
  • 您想使用 Google Apps 脚本实现此目的。

如果我的理解是正确的,这个答案怎么样?请将此视为几个可能的答案之一。

修改点:

  • 可以通过检索数据范围来减少循环开销。
  • 删除行时,使用反向循环时,过程可以更简单。因为当一行被删除时,行号就改变了。请注意这一点。

模式 1:

在此模式中,使用了类似 SpreadsheetApp 的 Spreadsheet 服务。

修改后的脚本:

function myFunction() {
  var sheetName = "Today"; // Please set the sheet name.

  var Today = SpreadsheetApp.getActiveSpreadsheet().getSheetByName(sheetName);
  var values = Today.getRange('C6:C' + Today.getLastRow()).getValues();
  for (var i = values.length - 1; i >= 0; i--) {
    if (values[i][0]) Today.deleteRow(i + 6);
  }
}

模式二:

在此模式中,使用了 Sheets API。所以please enable Sheets API at Advanced Google services.当删除行数较多时,该方法的处理成本低于模式1。

示例脚本:

function myFunction() {
  var sheetName = "Today"; // Please set the sheet name.

  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var sheet = ss.getSheetByName(sheetName);
  var sheetId = sheet.getSheetId();
  var values = sheet.getRange('C6:C' + sheet.getLastRow()).getValues();
  var requests = values.reduce(function(ar, [e], i) {
    if (e) ar.push({deleteDimension:{range:{sheetId:sheetId,dimension:"ROWS",startIndex:(i + 5),endIndex:(i + 6)}}});
    return ar;
  }, []).reverse();
  Sheets.Spreadsheets.batchUpdate({requests: requests}, ss.getId());
}

参考文献:

如果我误解了你的问题,这不是你想要的方向,我很抱歉。