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


  • 从第6行开始的C列中,全部都是复选框
  • 我想删除选中该行C列中框的所有行
  • 此工作表的名称为"Today",位于下面的同名变量中

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

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"的工作表名称上选中"C"列复选框的行
  • 复选框被置于"C6:C">
  • 你想使用谷歌应用程序脚本来实现这一点

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

修改要点:

  • 可以通过检索数据范围来降低循环成本
  • 当删除行时,当使用反向循环时,过程可以更简单。因为当删除一行时,行号会发生更改。请小心

模式1:

在这种模式中,使用了类似SpreadsheetApp的电子表格服务。

修改的脚本:

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);
}
}

模式2:

在此模式中,使用Sheets API。因此,请在高级谷歌服务中启用Sheets API。当删除行的数量大时,该方法的处理成本低于模式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());
}

参考文献:

  • 方法:spreadsheets.batchUpdate
  • 高级谷歌服务

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

相关内容

最新更新