#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();
.
Проблемы:
- функция 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();
если вы хотите получить активный (выбранный) лист.