识别并删除列中第一个选中的复选框 [Google Sheets]
Identify and delete the first checked checkbox in a column [Google Sheets]
- C 列,从第 6 行开始,全部都是复选框。
- 我想删除选中该行 C 列中框的所有行。
- 这个sheet的名字是'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" 的 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());
}
参考文献:
如果我误解了你的问题,这不是你想要的方向,我很抱歉。
- C 列,从第 6 行开始,全部都是复选框。
- 我想删除选中该行 C 列中框的所有行。
- 这个sheet的名字是'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" 的 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());
}
参考文献:
如果我误解了你的问题,这不是你想要的方向,我很抱歉。