Домашняя страница Undo Do New Save Карта сайта Обратная связь Поиск по форуму
МИР MS EXCEL - Гость.xls

Вход

Регистрация

Напомнить пароль

 

= Мир MS Excel/Вывод определенных диапазонов из таблицы при помощи скрипта. - Мир MS Excel

Старая форма входа
  • Страница 1 из 1
  • 1
Модератор форума: _Boroda_, китин  
Вывод определенных диапазонов из таблицы при помощи скрипта.
Kashimirush Дата: Четверг, 27.02.2020, 15:56 | Сообщение № 1
Группа: Проверенные
Ранг: Форумчанин
Сообщений: 240
Репутация: 41 ±
Замечаний: 0% ±

Excel 2010
Доброго времени суток.
Вопрос каким методом в 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
Дата добавления - 27.02.2020 в 15:56
Gustav Дата: Четверг, 27.02.2020, 17:53 | Сообщение № 2
Группа: Админы
Ранг: Участник клуба
Сообщений: 2797
Репутация: 1161 ±
Замечаний: ±

начинал с Excel 4.0, видел 2.1
взять диапазоны А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);
}
[/vba]

getRangelist - я не вкурил, так и не понял как он работает.

Я сам пока не пробовал, но по описанию понял, что это класс для выполнения ОДНОГО действия сразу для НЕСКОЛЬКИХ диапазонов различной формы (именно они и перечисляются в этом списке). Например, можно задать всем ячейкам этих диапазонов одно и то же значение при помощи метода setValue (заметьте множественная версия setValues не предусмотрена!), или задать единый цвет фона, или задать одинаковые границы ячеек и т.д. Заметьте также, что в классе есть много методов set... и ни одного метода get... - поэтому операцию по выгрызанию колонок из середины диапазона (как в скрипте выше) с его помощью сделать нельзя. Но можно, конечно, при помощи метода getRanges получить доступ ко всем диапазонам этого списка и как-то перебрать их в цикле, но это уже совсем другая история.


МОИ: Ник, Tip box: 41001663842605

Сообщение отредактировал Gustav - Четверг, 27.02.2020, 20:44
 
Ответить
Сообщение
взять диапазоны А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);
}
[/vba]

getRangelist - я не вкурил, так и не понял как он работает.

Я сам пока не пробовал, но по описанию понял, что это класс для выполнения ОДНОГО действия сразу для НЕСКОЛЬКИХ диапазонов различной формы (именно они и перечисляются в этом списке). Например, можно задать всем ячейкам этих диапазонов одно и то же значение при помощи метода setValue (заметьте множественная версия setValues не предусмотрена!), или задать единый цвет фона, или задать одинаковые границы ячеек и т.д. Заметьте также, что в классе есть много методов set... и ни одного метода get... - поэтому операцию по выгрызанию колонок из середины диапазона (как в скрипте выше) с его помощью сделать нельзя. Но можно, конечно, при помощи метода getRanges получить доступ ко всем диапазонам этого списка и как-то перебрать их в цикле, но это уже совсем другая история.

Автор - Gustav
Дата добавления - 27.02.2020 в 17:53
Kashimirush Дата: Понедельник, 02.03.2020, 08:31 | Сообщение № 3
Группа: Проверенные
Ранг: Форумчанин
Сообщений: 240
Репутация: 41 ±
Замечаний: 0% ±

Excel 2010
Gustav, Получается мы берем весь диапазон все равно, и просто удаляем из него не нужные столбцы, это влияет как то на скорость работы скрипта?
просто в рабочем файле у меня диапазон A-AJ, и из него мне нужно получать 4 колонки


Работа, работа, перейди на Федота...
 
Ответить
СообщениеGustav, Получается мы берем весь диапазон все равно, и просто удаляем из него не нужные столбцы, это влияет как то на скорость работы скрипта?
просто в рабочем файле у меня диапазон A-AJ, и из него мне нужно получать 4 колонки

Автор - Kashimirush
Дата добавления - 02.03.2020 в 08:31
Gustav Дата: Понедельник, 02.03.2020, 12:25 | Сообщение № 4
Группа: Админы
Ранг: Участник клуба
Сообщений: 2797
Репутация: 1161 ±
Замечаний: ±

начинал с Excel 4.0, видел 2.1
Kashimirush, по поводу скорости - без понятия. Надо тестировать и засекать. Но не думаю, что это как-то очень критично.

Альтернатива методу "берем сразу все и потом удаляем" очевидна - "берем колонки по отдельности и сшиваем". При отдельных колонках получится больше кода. Если 4 колонки совсем не смежные, то придётся читать их в четыре массива и потом построчно соединять в один. Могу набросать процедурку, если скажете, какие именно 4 колонки из диапазона A-AJ нужны.

Но, возможно, самый быстрый способ для выбора нескольких колонок - отдельный рабочий лист и на нём объединяющая нужные колонки формула с фигурными скобками или с функцией QUERY.


МОИ: Ник, Tip box: 41001663842605
 
Ответить
СообщениеKashimirush, по поводу скорости - без понятия. Надо тестировать и засекать. Но не думаю, что это как-то очень критично.

Альтернатива методу "берем сразу все и потом удаляем" очевидна - "берем колонки по отдельности и сшиваем". При отдельных колонках получится больше кода. Если 4 колонки совсем не смежные, то придётся читать их в четыре массива и потом построчно соединять в один. Могу набросать процедурку, если скажете, какие именно 4 колонки из диапазона A-AJ нужны.

Но, возможно, самый быстрый способ для выбора нескольких колонок - отдельный рабочий лист и на нём объединяющая нужные колонки формула с фигурными скобками или с функцией QUERY.

Автор - Gustav
Дата добавления - 02.03.2020 в 12:25
Kashimirush Дата: Понедельник, 02.03.2020, 15:33 | Сообщение № 5
Группа: Проверенные
Ранг: Форумчанин
Сообщений: 240
Репутация: 41 ±
Замечаний: 0% ±

Excel 2010
отдельный рабочий лист

Так и реализуется, пока. Просто у меня в голове голос шепчет, что копировать все данные не очень айс. Т.к. сейчас в квери ипортрейндж стоит и обновлениям конца и края нет, а мне надо всего то один раз в день реестр обновлять

Потестил splice вроде не сильно долго, по крайней мере скрипт выполняется и не крашится.
Вот что получилось на текущий момент в тестовых таблицах: форум параллельная ветка


Работа, работа, перейди на Федота...
 
Ответить
Сообщение
отдельный рабочий лист

Так и реализуется, пока. Просто у меня в голове голос шепчет, что копировать все данные не очень айс. Т.к. сейчас в квери ипортрейндж стоит и обновлениям конца и края нет, а мне надо всего то один раз в день реестр обновлять

Потестил splice вроде не сильно долго, по крайней мере скрипт выполняется и не крашится.
Вот что получилось на текущий момент в тестовых таблицах: форум параллельная ветка

Автор - Kashimirush
Дата добавления - 02.03.2020 в 15:33
  • Страница 1 из 1
  • 1
Поиск:

Яндекс.Метрика Яндекс цитирования
© 2010-2024 · Дизайн: MichaelCH · Хостинг от uCoz · При использовании материалов сайта, ссылка на www.excelworld.ru обязательна!