Неправильная ошибка высоты диапазона в скрипте Google Sheets - PullRequest
0 голосов
/ 07 февраля 2019

Абсолютно новый для JS.Код просматривает идентификатор YouTube «A2» и предоставляет заголовок видео и общее количество просмотров.Это работает для одного идентификатора, указанного в «A2», но я не могу заставить его работать с диапазоном.

Я попытался настроить диапазоны и использовал формат строки и столбца.

Например, расширение ячеек до строки 7, как вы видите ниже, дает мне эту ошибку "Неверная высота диапазона, была 1, но должна быть 6 (строка 7, файл" Код ")"

function getVideoInfo() {
  var sheet = SpreadsheetApp.getActiveSheet();
  var vid = sheet.getRange("A2:A7").getValue();
  var data = YouTube.Videos.list('snippet, statistics', {id: vid});
  var item = data.items[0];
  var info = [item.snippet.title, item.statistics.viewCount];
  sheet.getRange("B2:C7").setValues([info]);
}

Я также пытался настроить элементы данных на число, отличное от [0]

1 Ответ

0 голосов
/ 08 февраля 2019
  • Вы хотите извлечь значения snippet.title и statistics.viewCount из идентификаторов, введенных в «A2: A7», и поместить результат в «B2: C7».
  • Когда сценарийиспользуется как var vid = sheet.getRange("A2").getValue() и sheet.getRange("B2:C2").setValues([info]), работает нормально.

Если мое понимание верно, как насчет этой модификации?

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

  • sheet.getRange("A2:A7").getValue() извлекает только значение "A2".
  • В текущем сценарии, когда запускается sheet.getRange("B2:C7").setValues([info]), он пытается поместить значение 1 строки и 2 столбцов в ячейки 6строки и 2 столбца.При этом возникает такая ошибка.

Требуется извлечь значения из ячеек "A2: A7" и поместить значения из 6 строк и 2 столбцов в "B2: C7".

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

Пожалуйста, измените ваш скрипт следующим образом.

function getVideoInfo() {
  var sheet = SpreadsheetApp.getActiveSheet();
  var vid = sheet.getRange("A2:A7").getValues();
  var info = vid.map(function(e) {
    var data = YouTube.Videos.list('snippet, statistics', {id: e});
    var item = data.items[0];
    return [item.snippet.title, item.statistics.viewCount];
  });
  sheet.getRange("B2:C7").setValues(info);
}

Ссылки:

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

Edit1:

Если я изменю скрипт, чтобы посмотреть на все ячейки в диапазоне A: A, и не иметь значения в ячейкев диапазоне A: AI получает следующую ошибку.TypeError: Cannot read property "snippet" from undefined. (line 7, file "Code").Я хотел бы иметь возможность иметь ячейки в диапазоне A: пробел и все еще запускать скрипт.

О ваш новый вопрос , когда естьпустые ячейки в столбце «A», вы хотите поместить пустые значения в столбцы «B» и «C».Я так понял.Таким образом, я изменил свой скрипт.

Измененный скрипт:

function getVideoInfo() {
  var sheet = SpreadsheetApp.getActiveSheet();
  var vid = sheet.getRange("A:A").getValues(); // Modified
  var info = vid.map(function(e) {
    if (e) { // Added
      var data = YouTube.Videos.list('snippet, statistics', {id: e});
      var item = data.items[0];
      return [item.snippet.title, item.statistics.viewCount];
    }
    return ["",""]; // Added
  });
  sheet.getRange("B:C").setValues(info); // Modified
}

Edit2:

Я получаю следующую ошибку TypeError: Cannot read property "snippet" from undefined. (line 8, file "Code") при наличии идентификаторовв A2:A7, но не в A8

Начиная с do not have a value in a cell in range A:A I get the following error., я понял, что в столбце «А» есть несколько пустых ячеек.Но из вашего комментария считается, что проблема заключается в значении ячейки.Поэтому, когда ошибка возникает в var data = YouTube.Videos.list('snippet, statistics', {id: e}), я модифицировал скрипт, чтобы игнорировать ошибку.

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

function getVideoInfo() {
  var sheet = SpreadsheetApp.getActiveSheet();
  var vid = sheet.getRange("A:A").getValues(); // Modified
  var info = vid.map(function(e) {
    if (e) {
      try { // Added
        var data = YouTube.Videos.list('snippet, statistics', {id: e});
        var item = data.items[0];
        return [item.snippet.title, item.statistics.viewCount];
      } catch(er) { // Added
        return ["",""];
      }
    }
    return ["",""];
  });
  sheet.getRange("B:C").setValues(info); // Modified
}
...