Есть ли способ заставить этот скрипт работать быстрее?

Эта функция работает построчно и удаляет строки, если строка в столбце B не равна serverinputvalue или если значение в столбце D меньше minscorevalue.

проблема в том, что он работает очень медленно. Есть ли способ ускорить это?

function readRows() {

  var sheet = SpreadsheetApp.getActiveSheet();
  var rows = sheet.getDataRange();
  var numRows = rows.getNumRows();
  var values = rows.getValues();
  var serverinputvalue= SpreadsheetApp.getActive().getSheetByName('Instructions').getRange('C13').getValue();
  var minscoreinputvalue = SpreadsheetApp.getActive().getSheetByName('Instructions').getRange('C17').getValue();

  var rowsDeleted = 0;
  for (var i = 1; i <= numRows - 1; i++) {
    var row = values[i];
    if (row[1] != serverinputvalue || row[3] < minscoreinputvalue) {
      sheet.deleteRow((parseInt(i)+1) - rowsDeleted);
      rowsDeleted++;
    }
  }
};

Я прочитал этот источник https://yagisanatode.com/2019/06/12/google-apps-script-delete-rows-based-on-a-columns-cell-value-in-google-sheet в котором упоминается метод ускорения аналогичной функции, но, если быть на 100% честным, я не совсем понимаю, как это реализовать.

Шаблоны Angular PrimeNg
Шаблоны Angular PrimeNg
Как привнести проверку типов в наши шаблоны Angular, использующие компоненты библиотеки PrimeNg, и настроить их отображение с помощью встроенной...
Создайте ползком, похожим на звездные войны, с помощью CSS и Javascript
Создайте ползком, похожим на звездные войны, с помощью CSS и Javascript
Если вы веб-разработчик (или хотите им стать), то вы наверняка гик и вам нравятся "Звездные войны". А как бы вы хотели, чтобы фоном для вашего...
Документирование API с помощью Swagger на Springboot
Документирование API с помощью Swagger на Springboot
В предыдущей статье мы уже узнали, как создать Rest API с помощью Springboot и MySql .
Начала с розового дизайна
Начала с розового дизайна
Pink Design - это система дизайна Appwrite с открытым исходным кодом для создания последовательных и многократно используемых пользовательских...
Шлюз в PHP
Шлюз в PHP
API-шлюз (AG) - это сервер, который действует как единая точка входа для набора микросервисов.
14 Задание: Типы данных и структуры данных Python для DevOps
14 Задание: Типы данных и структуры данных Python для DevOps
проверить тип данных используемой переменной, мы можем просто написать: your_variable=100
0
0
53
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Попробуй это:

function readRows() {
  const ss = SpreadsheetApp.getActive();
  var C13= ss.getSheetByName('Instructions').getRange('C13').getValue();
  var C17 = ss.getSheetByName('Instructions').getRange('C17').getValue();
  var sh = ss.getActiveSheet();
  var rg = sh.getRange(2,1,sh.getLastRow() - 1, sh.getLastColumn());
  var vs = rg.getValues().filter(r => {if(r[1] == C13 && r[3] >= C17) return true});
  rg.clearContent();
  sh.getRange(2,1,vs.length,vs[0].length).setValues(vs);
}

Отлично! большое большое спасибо. Это в 10 раз быстрее или больше. Однако он удаляет мой заголовок, есть ли способ сохранить содержимое первой строки?

3jay1 18.11.2022 23:16

О, да. Я не знал, был ли это заголовок. Я изменил его.

Cooper 18.11.2022 23:24

Этот скрипт изменяет способ отображения данных в некоторых ячейках. Ячейка со значением 02476 становится 2476. Также пустая ячейка становится 0. Есть ли способ предотвратить это?

3jay1 19.11.2022 03:12

нужен конкретный пример

Cooper 19.11.2022 03:48

Что ж, когда вы запускаете ее в листах Google и первое число в одной из ячеек в диапазоне равно 0 (может быть любая ячейка, не обязательно те, для которых мы выполняем логику), эта формула отбрасывает 0… скажем, у вас есть [ 02345, 192.168.1.1, 15000, 20:00] после запуска этого сценария, который становится [2345, 192.168.1.1, Калифорния, 20:00]. Обратите внимание на изменение позиции [0]

3jay1 19.11.2022 23:40

Эй, Купер, просто хотел обновить это, потому что ваш код оказался очень полезным и на случай, если кто-нибудь наткнется на него. Решение для getValues ​​setValues, из-за которого такие значения, как «01234», становятся «1234», было решено путем первого форматирования этого столбца в обычный текст с помощью .setNumberFormat('@').

3jay1 05.12.2022 20:10

Другие вопросы по теме