Google apps script 识别并删除列[Google Sheets]中的第一个选中复选框 第6行及以后的C列中完全充满了复选框 我想删除选中该行C列框的所有行 此工作表的名称为“Today”,位于下面同名的变量中

Google apps script 识别并删除列[Google Sheets]中的第一个选中复选框 第6行及以后的C列中完全充满了复选框 我想删除选中该行C列框的所有行 此工作表的名称为“Today”,位于下面同名的变量中,google-apps-script,google-sheets,google-sheets-macros,Google Apps Script,Google Sheets,Google Sheets Macros,这是我迄今为止所做的,但未成功运行,我无法确定原因: 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 ran

这是我迄今为止所做的,但未成功运行,我无法确定原因:

    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.
      }
var values=Today.getRange('C6:C').getValues();
var a=0;
而(a
  • 您想删除在工作表名称“今天”中选中“C”列复选框的行
  • 复选框被设置为“C6:C”
  • 您希望使用谷歌应用程序脚本实现这一点
如果我的理解是正确的,那么这个答案呢?请把它看作是几种可能的答案之一

修改点:
  • 通过检索数据范围,可以降低循环成本
  • 删除行时,使用反向循环时,过程会更简单。因为删除行时,行号会更改。请注意这一点
模式1: 在此模式中,使用了类似于
SpreadsheetApp
的电子表格服务

修改脚本: 模式2: 在该模式中,使用了Sheets API。因此,当删除行数较大时,该方法的处理成本低于模式1

示例脚本: 参考资料:

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

这是我到目前为止所做的,它没有成功运行,并且我无法确定原因:值的值是什么?提示:Logger.log(值);谢谢。模式1显示了我所缺少的内容。不过,我有一个问题-如果我尝试使用相同的模式来删除所有未选中的框,它似乎会失败。我已将模式1中的“值[I][0]”替换为“值[I][0]==false。这不应该以同样的方式删除所有未选中的框吗?@Nagaram92感谢您的回复。不幸的是,我无法理解
中的详细情况,它似乎失败了。
。这是由于我的英语技能差。对此我深表歉意。如果您想删除包含未选中框的行使用模式1的列“C”中的复选框,如何修改
if(值[i][0])今天。删除行(i+6);
if(值[i][0]==false)今天。删除行(i+6)
?但我无法理解你的实际情况。因此,如果这不是你想要的方向,我再次道歉。非常感谢塔奈克。你的评论正是我需要的。再次感谢你。
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);
  }
}
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());
}