#javascript #google-sheets
#javascript #google-sheets
Вопрос:
В таблице Google у меня есть пользовательская функция в ячейке =doSomething(myrange)
. При использовании myrange
непосредственно в моем скрипте он вернет значения диапазона в виде массива. В случае, если мне нужно не содержимое диапазона, а сам диапазон (например, для получения цветов ячеек), есть возможность проанализировать первый параметр как строку и создать диапазон на лету.
Пример:
function doSomething(myRange) {
let activeRg = SpreadsheetApp.getActiveRange();
let activeformula = activeRg.getFormula();
let countRangeAddress = activeformula.match(/((.*),/).pop().trim();
...
Есть ли более элегантный способ получить диапазон, а не содержимое диапазона в виде массива? Это сделало бы код намного более читабельным.
Комментарии:
1. Хорошо, после попытки работы с этой вышеупомянутой функцией я решил удалить скрипт и работать со стандартными формулами Google Sheet. Функция была действительно ненадежной.
2. Я удалил свою пользовательскую функцию и заменил ее стандартной формулой. Функция, хотя и очень простая, работала ненадежно. Его использование в разных строках электронной таблицы иногда приводило к правильным, иногда к неправильным результатам.
Ответ №1:
Вы можете передать свой диапазон в виде строки в своей пользовательской функции и использовать Sheet.getRange(A1Notation)
Вместо =doSomething(A2:B3)
использования =doSomething("A2:B3")
Пример кода:
function doSomething(myRange){
var sheet = SpreadsheetApp.getActiveSheet();
var bgColors = sheet.getRange(myRange).getBackgrounds()
for (var i in bgColors) {
for (var j in bgColors[i]) {
Logger.log(bgColors[i][j]);
}
}
return bgColors;
}
Вывод:
- Вы также можете указать, на каком листе вы хотите прочитать диапазон, как показано в примере вывода
Комментарии:
1. Привет, Рон, ты вложил много усилий в свой ответ, и я ценю это. Однако это не было бы моим предпочтительным решением, поскольку у меня есть коллеги, которым потребуется введение в использование этой простой функции, и это было бы невозможно.