Доброго времени суток. Вопрос каким методом в GAS можно взять данные из разделенных диапазонов (Типа А1:A + D1:E) метод getRange, так не умеет. getRangelist - я не вкурил, так и не понял как он работает. Задача звучит просто взять диапазоны А1:A + D1:E с одного листа и вставить их в диапазон А1:С на другом. Но я с ней не могу справиться
Доброго времени суток. Вопрос каким методом в GAS можно взять данные из разделенных диапазонов (Типа А1:A + D1:E) метод getRange, так не умеет. getRangelist - я не вкурил, так и не понял как он работает. Задача звучит просто взять диапазоны А1:A + D1:E с одного листа и вставить их в диапазон А1:С на другом. Но я с ней не могу справитьсяKashimirush
взять диапазоны А1:A + D1:E с одного листа и вставить их в диапазон А1:С на другом
[vba]
Код
function ignorSomeColumnsInsideRange() {
var ss = SpreadsheetApp.getActive(); var sheet = ss.getSheetByName("Лист1");
// получаем данные из исходного диапазона var values = sheet.getRange("A:E").getValues();
// удаляем пустые строки в конце таблицы - за последней непустой строкой values.splice(sheet.getLastRow(), sheet.getMaxRows());
// удаляем ЗНАЧЕНИЯ ненужных столбцы в середине диапазона - сжимаем массив по горизонтали // т.е. построчно удаляем колонки со 2-й по 3-ю, т.е. 2 элемента, начиная с элемента 1 - т.е. данные из колонок B и C values.forEach(function(v) { v.splice(1, 2); });
// вставка на другой лист ss.getSheetByName("Лист2").getRange(1, 1, values.length, values[0].length).setValues(values); }
getRangelist - я не вкурил, так и не понял как он работает.
Я сам пока не пробовал, но по описанию понял, что это класс для выполнения ОДНОГО действия сразу для НЕСКОЛЬКИХ диапазонов различной формы (именно они и перечисляются в этом списке). Например, можно задать всем ячейкам этих диапазонов одно и то же значение при помощи метода setValue (заметьте множественная версия setValues не предусмотрена!), или задать единый цвет фона, или задать одинаковые границы ячеек и т.д. Заметьте также, что в классе есть много методов set... и ни одного метода get... - поэтому операцию по выгрызанию колонок из середины диапазона (как в скрипте выше) с его помощью сделать нельзя. Но можно, конечно, при помощи метода getRanges получить доступ ко всем диапазонам этого списка и как-то перебрать их в цикле, но это уже совсем другая история.
взять диапазоны А1:A + D1:E с одного листа и вставить их в диапазон А1:С на другом
[vba]
Код
function ignorSomeColumnsInsideRange() {
var ss = SpreadsheetApp.getActive(); var sheet = ss.getSheetByName("Лист1");
// получаем данные из исходного диапазона var values = sheet.getRange("A:E").getValues();
// удаляем пустые строки в конце таблицы - за последней непустой строкой values.splice(sheet.getLastRow(), sheet.getMaxRows());
// удаляем ЗНАЧЕНИЯ ненужных столбцы в середине диапазона - сжимаем массив по горизонтали // т.е. построчно удаляем колонки со 2-й по 3-ю, т.е. 2 элемента, начиная с элемента 1 - т.е. данные из колонок B и C values.forEach(function(v) { v.splice(1, 2); });
// вставка на другой лист ss.getSheetByName("Лист2").getRange(1, 1, values.length, values[0].length).setValues(values); }
getRangelist - я не вкурил, так и не понял как он работает.
Я сам пока не пробовал, но по описанию понял, что это класс для выполнения ОДНОГО действия сразу для НЕСКОЛЬКИХ диапазонов различной формы (именно они и перечисляются в этом списке). Например, можно задать всем ячейкам этих диапазонов одно и то же значение при помощи метода setValue (заметьте множественная версия setValues не предусмотрена!), или задать единый цвет фона, или задать одинаковые границы ячеек и т.д. Заметьте также, что в классе есть много методов set... и ни одного метода get... - поэтому операцию по выгрызанию колонок из середины диапазона (как в скрипте выше) с его помощью сделать нельзя. Но можно, конечно, при помощи метода getRanges получить доступ ко всем диапазонам этого списка и как-то перебрать их в цикле, но это уже совсем другая история.Gustav
Gustav, Получается мы берем весь диапазон все равно, и просто удаляем из него не нужные столбцы, это влияет как то на скорость работы скрипта? просто в рабочем файле у меня диапазон A-AJ, и из него мне нужно получать 4 колонки
Gustav, Получается мы берем весь диапазон все равно, и просто удаляем из него не нужные столбцы, это влияет как то на скорость работы скрипта? просто в рабочем файле у меня диапазон A-AJ, и из него мне нужно получать 4 колонкиKashimirush
Kashimirush, по поводу скорости - без понятия. Надо тестировать и засекать. Но не думаю, что это как-то очень критично.
Альтернатива методу "берем сразу все и потом удаляем" очевидна - "берем колонки по отдельности и сшиваем". При отдельных колонках получится больше кода. Если 4 колонки совсем не смежные, то придётся читать их в четыре массива и потом построчно соединять в один. Могу набросать процедурку, если скажете, какие именно 4 колонки из диапазона A-AJ нужны.
Но, возможно, самый быстрый способ для выбора нескольких колонок - отдельный рабочий лист и на нём объединяющая нужные колонки формула с фигурными скобками или с функцией QUERY.
Kashimirush, по поводу скорости - без понятия. Надо тестировать и засекать. Но не думаю, что это как-то очень критично.
Альтернатива методу "берем сразу все и потом удаляем" очевидна - "берем колонки по отдельности и сшиваем". При отдельных колонках получится больше кода. Если 4 колонки совсем не смежные, то придётся читать их в четыре массива и потом построчно соединять в один. Могу набросать процедурку, если скажете, какие именно 4 колонки из диапазона A-AJ нужны.
Но, возможно, самый быстрый способ для выбора нескольких колонок - отдельный рабочий лист и на нём объединяющая нужные колонки формула с фигурными скобками или с функцией QUERY.Gustav
Так и реализуется, пока. Просто у меня в голове голос шепчет, что копировать все данные не очень айс. Т.к. сейчас в квери ипортрейндж стоит и обновлениям конца и края нет, а мне надо всего то один раз в день реестр обновлять
Потестил splice вроде не сильно долго, по крайней мере скрипт выполняется и не крашится. Вот что получилось на текущий момент в тестовых таблицах: форум параллельная ветка
Так и реализуется, пока. Просто у меня в голове голос шепчет, что копировать все данные не очень айс. Т.к. сейчас в квери ипортрейндж стоит и обновлениям конца и края нет, а мне надо всего то один раз в день реестр обновлять
Потестил splice вроде не сильно долго, по крайней мере скрипт выполняется и не крашится. Вот что получилось на текущий момент в тестовых таблицах: форум параллельная веткаKashimirush