Определите и удалите первый отмеченный флажок в столбце [Google Sheets] - PullRequest
0 голосов
/ 10 марта 2020
  • Столбец C, начиная со строки 6 и далее, полностью заполнен флажками.
  • Я хочу удалить все строки, для которых установлен флажок в столбце C этой строки.
  • Имя этого листа: «Сегодня» и находится в переменной с тем же именем ниже.

Это то, что у меня пока есть, которое не запускается успешно, и я не могу определить, почему:

    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.
      }

1 Ответ

2 голосов
/ 10 марта 2020
  • Вы хотите удалить строки, для которых установлен флажок столбца "C" в имени листа "Сегодня".
  • Флажок установлен в "C6: C ".
  • Вы хотите добиться этого с помощью Google Apps Script.

Если мое понимание верно, как насчет этого ответа? Пожалуйста, подумайте об этом как об одном из нескольких возможных ответов.

Точки модификации:

  • Стоимость l oop может быть уменьшена путем извлечения диапазона данных.
  • При удалении строки и использовании обратного l oop процесс может быть проще. Потому что, когда строка удаляется, номер строки изменяется. Пожалуйста, будьте осторожны.

Шаблон 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 в службах Advanced Google. Когда количество удаляемых строк велико, стоимость процесса для этого метода ниже, чем для шаблона 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());
}

Ссылки:

Если я неправильно понял ваш вопрос, и это было не то направление, которое вы хотите, я прошу прощения.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...