Каждый раз, когда я использую getRange
в своей программе (строки 8 и 11), я получаю сообщение об ошибке.
Исключение: диапазон не найден,
но я не могу понять почему.
Я пробовал использовать getA1notation()
и toString()
, но оба привели к одной и той же ошибке.
Код в виде текста:
var ss = SpreadsheetApp.getActiveSpreadsheet();
var sheet = ss.getSheets()[0];
function rangeAsNote(targCell, targRange) {
//Sets up output string
let rangeAsString = new String();
//Creates new var "cell" and sets it to the inputted range of cells
var cell = sheet.getRange(targCell);
//Sets "rangeAsString" to "targRange" converted to the desired format using rangeToString()
rangeAsString = rangeToString(sheet.getRange(targRange));
//Sets the note of "cell" to "rangeAsString"
cell.setNote(rangeAsString);
return;
}
Начнем с того, что то, что вы пытаетесь сделать, невозможно, поскольку пользовательские функции в Google Sheets могут возвращать только значения; их нельзя использовать для изменения электронной таблицы.
Давайте углубимся в конкретный вопрос. Сообщение об ошибке, с которым вы столкнулись, вероятно, связано с тем, что ссылки на ячейки/диапазоны используются в качестве параметров пользовательских функций в Google Sheets и Google Apps Script. Эти ссылки возвращают значения ячеек/диапазонов, а не строку, необходимую для метода SpreasheetApp.Sheet.getRange
. Понимание этого поможет вам более эффективно устранять неполадки.
Вместо
=rangeAsNote(A1, E1:G1)
самое простое решение — использовать текстовые значения в качестве параметров, как показано ниже:
=rangeAsNote("A1", "E1:G1")
Однако, как уже упоминалось в верхней части этих ответов, это не будет работать так, как вы ожидаете, из-за ограничений пользовательских функций. Используйте другой метод для вызова функции:
Это может означать внесение изменений в функцию для передачи необходимых параметров.
Если пользовательские функции не могут этого сделать, то как такие функции, как setNote()
и setValue()
, должны что-то делать?
Используйте другой метод для вызова функции: пользовательское меню, назначьте функцию изображению, используйте триггер, вызовите ее из редактора сценариев приложений или создайте диалоговое окно, боковую панель или веб-приложение.
В документации сказано, что
if you call your function with a reference to a single cell as an argument, the argument will be the value of the cell.
иif you call your function with a reference to a range of cells as an argument, the argument will be a two-dimensional array of cells' values.
Итак,targCell
иtargRange
являются не ссылками на диапазоны, а фактическими значениями ячеек, которые указаны либо как одно значение, либо как массив значений. Функции сценариев приложений