Метод getNamedRanges()
возвращает вам объекты диапазона, а не их имена, а setValues
работает только в том случае, если измерения значений соответствуют измерению диапазона
- Для извлечения диапазонов имен вам нужно перебрать все объекты диапазона и извлечь имя каждого отдельного диапазона с помощью
getName()
[myArray]
будет иметь содержимое [[range1, range2, ...]]
, которое будет интерпретировано как вложенный массив будет несколько столбцов и только одна строка - Чтобы создать массив с несколькими столбцами и только одну строку, вы можете сделать следующее:
var myRanges = SpreadsheetApp.getActiveSpreadsheet().getNamedRanges();
Logger.log(myRanges);
var myArray = [];
for (var i = 0; i< myRanges.length; i++){
myArray[i] = [];
myArray[i].push(myRanges[i].getName());
}
- Учитывая, что ваш лист
mySheet
всегда активный лист, вы можете указать другое имя листа в getRange()
. Вместо этого укажите
SpreadsheetApp.getActiveSpreadsheet().getRange('Named Ranges!A1:A314')
или, что еще лучше, динамически:
var myRangeSheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName('Named Ranges');
myRangeSheet.getRange(1,1, myArray.length, 1)
- Поскольку число строк и столбцов в данных должно соответствовать количеству строк в диапазон, последний подход к последнему позволяет динамически оценивать номер строки, соответствующий количеству записей списка, независимо от количества именованных диапазонов.
- Нет необходимости
clearContent()
перед перезаписью возможные данные с setValues
Пример изменения вашего кода:
function myFunction() {
var myRanges = SpreadsheetApp.getActiveSpreadsheet().getNamedRanges();
var myArray = [];
for (var i = 0; i< myRanges.length; i++){
myArray[i] = [];
myArray[i].push(myRanges[i].getName());
}
var myRangeSheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName('Named Ranges');
myRangeSheet.getRange(1,1, myArray.length, 1).setValues(myArray);
}