Скрипт Google продолжает падать из-за большого набора данных - PullRequest
3 голосов
/ 24 сентября 2019

Я использую сценарии Google для доступа к листу Google, чтобы представить данные в визуальной форме.Приведенная ниже функция работает, однако она начинает падать или работать медленно из-за большого количества данных в листе Google.Google выдает предупреждение Method Range.getValue is heavily used by the script..

Как мне написать это?

function generateUsers() {
  var spreadSheet = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();
  var rr = spreadSheet.getLastRow();

  var users = [];
  for (var i = 3; i <= rr; i++) {
    var firstName = spreadSheet.getRange(i, 1).getValue();
    var lastName = spreadSheet.getRange(i, 2).getValue();
    var phone = spreadSheet.getRange(i, 12).getValue();

    var user = {
      firstName: firstName,
      lastName: lastName,
      phone: phone
    };

    users.push(user);
  }
  return users; // Modified
}

1 Ответ

3 голосов
/ 24 сентября 2019

Как насчет этой модификации?Пожалуйста, подумайте об этом как об одном из нескольких ответов.

Модифицированный скрипт:

В этой модификации сначала все значения извлекаются из электронной таблицы.И затем, user создается из полученных значений.Пожалуйста, измените ваш скрипт следующим образом.

С:
var users = [];
for (var i = 3; i <= rr; i++) {
  var firstName = spreadSheet.getRange(i, 1).getValue();
  var lastName = spreadSheet.getRange(i, 2).getValue();
  var phone = spreadSheet.getRange(i, 12).getValue();

  var user = {
    firstName: firstName,
    lastName: lastName,
    phone: phone
  };

  users.push(user);
}
Кому:
var values = spreadSheet.getRange(3, 1, rr - 2, 12).getValues();
var users = values.map(function(row) {
  return {
    firstName: row[0],
    lastName: row[1],
    phone: row[11]
  };
});

Ссылки:

Если это не тот результат, который вам нужен, я прошу прощения.

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