Скрипт Google Apps getSheetByName возвращает значение null

#google-apps-script #google-sheets

#google-apps-script #google-sheets

Вопрос:

Результаты getSheetName и getSheetByName являются странными

     function BE1() {
  console.log("BE1() triggered");
  var variables = globalVariables(); //load the Global variables 
  console.log("sheetid = ", variables.sheetid);
  var sheetName = 'BE1';
  var ss = SpreadsheetApp.openById(variables.sheetid)
  if (!ss) {
    console.log("spreadsheet not found");
  }  else  {
    var numSheets = ss.getNumSheets();
    console.log("spreadsheet has ", numSheets, " sheets");
    var someSheet = ss.getSheetName();
    console.log("someSheet = ", someSheet);
    if (sheetName === someSheet) {
      console.log("names match");
    }  else  {
      console.log("names do not match");
    }  
    var sheet = ss.getSheetByName(sheetName);
    if (!sheet) {
      console.log("sheet BE1 not found");
    }  else  {
      console.log("sheet = ", sheet);
      var lastrow = sheet.getLastRow(); 
      console.log("lastrow = ", lastrow);
      console.log("question column = ", variables.question);
      var nextQuestion = sheet.getRange(lastrow, variables.question).getValue(nextQuestion);
      SlidesApp.getUi().alert(nextQuestion);
    }
  }
  

Журнал консоли:

 > Stackdriver logs
Oct 12, 2020, 2:40:11 PM    Debug   BE1() triggered
Oct 12, 2020, 2:40:11 PM    Debug   sheetid =  1QiuqmfF1z4Fe_RVD5BmPhvxq5sloHZs8ANFQ8gRLabA
Oct 12, 2020, 2:40:11 PM    Debug   spreadsheet has  2  sheets
Oct 12, 2020, 2:40:11 PM    Debug   someSheet =  BE1
Oct 12, 2020, 2:40:11 PM    Debug   names match
Oct 12, 2020, 2:40:11 PM    Debug   sheet =  {}
Oct 12, 2020, 2:40:11 PM    Debug   lastrow =  2
Oct 12, 2020, 2:40:11 PM    Debug   question column =  1
Oct 12, 2020, 2:40:11 PM    Error   Exception: The parameters (null) don't match the method signature for SpreadsheetApp.Range.getValue.
    at BE1(Code:45:70)
  

Обратите внимание, что строка соответствует любому листу, который извлекается, ss.getSheetName() но не работает getSheetByName . Какую глупую ошибку я совершаю? Я разбил весь код на отдельные строки для отображения на консоли.

Комментарии:

1. Обратите внимание, что в ошибке указано «Параметры (null)», а не «Не удается найти метод getRange() с значением null». Последнее указывает sheet значение null(при использовании как sheet.getRange() ), в то время как первое указывает, что переданный аргумент (параметр) равен null . Он не говорит, что sheet равен null.

2. Я поддерживаю вопрос, потому что OP пытался утешить. запишите каждую часть кода, которая, по его мнению, могла вызвать ошибку. Продолжайте в том же духе 🙂

Ответ №1:

Решение:

Заменить:

var nextQuestion = sheet.getRange(lastrow, variables.question).getValue(nextQuestion);

с

var nextQuestion = sheet.getRange(lastrow, variables.question).getValue(); .


Проблемы:


  • Также nextQuestion не определено в фрагменте кода, которым вы поделились; до его использования. Следовательно, nextQuestion равно null, и именно поэтому вы получаете:

    Параметры (null) не соответствуют сигнатуре метода для SpreadsheetApp.Range.GetValue.


Минимально воспроизводимый пример:

 function myFunction() {

var ss = SpreadsheetApp.getActive();
var someSheet = ss.getActiveSheet();
var nextQuestion;
someSheet.getRange(1,1).getValue(nextQuestion);
}
  

nextQuestion не имеет значения.

Это выдаст вам ту же ошибку:

Параметры (null) не соответствуют сигнатуре метода для SpreadsheetApp.Range.GetValue.


Бонусная информация:

getSheetName() предполагается использовать с объектом sheet, а не с объектом электронной таблицы.

Поэтому вместо использования:

 var ss = SpreadsheetApp.openById(variables.sheetid)
var someSheet = ss.getSheetName();
  

предпочтительнее использовать эту логику вместо:

 var ss = SpreadsheetApp.getActive();
var someSheet = ss.getActiveSheet().getSheetName();
  

если вы хотите получить активный (выбранный) лист.