привет.
для моего вчерашнего вопроса про importrange я нашёл более удобное решение (позволяет делать что угодно с полученными данными, а потом снова их обновить), кстати, в случае с importrange при удалении значения только в первой колонке, в консолидированной таблице удаляется вся строка:
function onOpen() {
var ui = SpreadsheetApp.getUi();
ui.createMenu('Моё меню')
.addItem('Бросить якорь в C56', 'setAnchor')
.addItem('Импорт от Операторов', 'importFromOperators')
.addToUi();
}
function importFromOperators() {
// подготовка места вставки данных в файле Консолидации
var ssBoss = SpreadsheetApp.getActive(); // файл Консолидации (текущий)
var bsSheet = ssBoss.getSheetByName('Лист2'); // название листа в файле Консолидации
var bsLastRow = Math.max(2, bsSheet.getLastRow());
var bsRange = bsSheet.getRange('A2:H'+bsLastRow); // диапазон на листе в файле Консолидации
bsRange.clear(); // очищаем перед новой загрузкой
var values = bsRange.getValues(); // инициализируем массив одной пустой строкой (потом удалим)
// массив идентификаторов файлов Операторов
var operIds = [ '16j-2JOSmbqyWyC2eB3T_dcINBP1cmP1sOvivI2RCaD4' ,
'1kG37JW8hFoN6ZuyYdSF_PaQ-2fHVSjIrKTe_xY48hBI' ,
'1gliJdShI_MCGAt8kJP1xkqcEGNKwaDF-U530oNiDW9M' ];
// читаем данные из файлов Операторов (цикл по файлам)
for(var i=0; i<operIds.length; i++) {
var ssOper = SpreadsheetApp.openById(operIds[i]); // очередной файл Оператора
var opSheet = ssOper.getSheetByName('Лист1'); // название листа в файле Оператора
var opLastRow = Math.max(2, opSheet.getLastRow());
var opRange = opSheet.getRange('A2:H'+opLastRow); // диапазон на листе в файле Оператора
values = values.concat(opRange.getValues()); // добавляем очередные значение в общий массив
}
// удаляем абсолютно пустые строки (массив уплотняется)
for (i=values.length-1; i>=0; i--) {
if (values[i].toString() == values[0].toString()) {
values.splice(i, 1);
}
}
// вставляем консолидированные данные на лист Консолидации
if (values.length) bsRange.offset(0, 0, values.length).setValues(values);
}