TypeError: Невозможно вызвать метод "getRange" со значением NULL. (строка 20, файл «Код») - PullRequest
0 голосов
/ 16 сентября 2018

Я получаю эту ошибку, когда пытаюсь запустить этот скрипт. Он предназначен для преобразования данных моих листов Google в JSON API.

TypeError: Невозможно вызвать метод "getRange" со значением NULL. (строка 20, файл "Код")

function doGet(e) {

   var sheetName = "Sheet name";
   var sheetId   = "1234...";

   var book = SpreadsheetApp.openById(sheetId);
   var sheet = book.getSheetByName(sheetName);

   var json = convertSheet2JsonText(sheet);

   return ContentService
        .createTextOutput(JSON.stringify(json))
        .setMimeType(ContentService.MimeType.JSON);
}

function convertSheet2JsonText(sheet) {
  // first line(title)
   var colStartIndex = 1;
   var rowNum = 1;
   var firstRange = sheet.getRange(2, 2, 2, sheet.getLastColumn());
   var firstRowValues = firstRange.getValues();
   var titleColumns = firstRowValues[0];

  // after the second line(data)
   var lastRow = sheet.getLastRow();
   var rowValues = [];
   for(var rowIndex=2; rowIndex<=lastRow; rowIndex++) {
   var colStartIndex = 1;
   var rowNum = 1;
   var range = sheet.getRange(rowIndex, colStartIndex, rowNum, 
sheet.getLastColumn());
   var values = range.getValues();
   rowValues.push(values[0]);
}

// create json
   var jsonArray = [];
   for(var i=0; i<rowValues.length; i++) {
   var line = rowValues[i];
   var json = new Object();
   for(var j=0; j<titleColumns.length; j++) {
     json[titleColumns[j]] = line[j];
   }
  jsonArray.push(json);
 }
 return jsonArray;
}

Есть ли что-нибудь, что вы можете увидеть, что вызвало бы эту ошибку?

1 Ответ

0 голосов
/ 23 сентября 2018

Имя вашего листа и / или sheetID, который вы использовали в своем коде, неверно.


Сообщение об ошибке = "TypeError: Невозможно вызвать метод" getRange "из null. (Строка20, файл "Код") "

Строка 20: var firstRange = sheet.getRange (2, 2, 2, sheet.getLastColumn ());

getRangeназывается "лист";это означает, что «sheet» имеет значение null.

Вам необходимо использовать функцию отладки Script (Run> Debug Function) для анализа вашего кода.Запустите отладку на doGet - отладка будет автоматически включать convertSheet2JsonText , который вызывается doGet .

Я создал несколько фиктивных данных на листепод названием «s1x», однако, я намеренно назначил «sheetName» = «s1».Теперь, когда я запускаю Debug, я получаю то же сообщение об ошибке.

Строка 20 является частью функции convertSheet2JsonText , но в этой функции нет недостатка;ошибка в doGet .

Ниже приведен экран отладки, показывающий ошибку.Обратите внимание на значение «листа» = ноль.enter image description here


Ниже приведен экран отладки, показывающий значения для doGet .Обратите внимание, что значение «sheet» уже равно нулю.Но также обратите внимание на значение sheetName = "s1".Единственная проблема заключается в том, что фактическим значением листа является «s1x».Это объясняет, почему «sheet» является нулевым.

Когда я исправляю значение sheetName, функция запускается без ошибок.enter image description here

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