- 从第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
- 高级谷歌服务
如果我误解了你的问题,而这不是你想要的方向,我道歉。