Google Apps Script. Методы getLastRow, getLastColumn, clear. Скрипты Google Sheets Урок 4.
Вставка
- Опубліковано 14 жов 2024
- В этом уроке вы узнаете как находить последнюю строку и столбец в листе, брать значения из определенного диапазона и вставлять его ниже последней строки в нужном вам листе с помощью скриптов. Google apps Script работает на основе JavaScript , по этому кто уже сталкивался с этим языком , будет на много легче.
Смотрите до конца, будет интересно.
Поддержи автора канала пальцем в верх и подпиской это для
меня лучший стимул продолжать развиваться.
Все уроки по Гугл таблицам в одном плейлисте - • Google таблицы. Как со...
Помощь по гугл таблицам - пишите в ВК id8947072
Мой паблик в Telegram - t.me/stmsolution
Буду рад видеть вас в моей группе ВК - public1...
Twitter - / stm_solution
Мой сайт stmsolution.ru
Станьте спонсором канала, и вы получите доступ к эксклюзивным бонусам. Подробнее:
/ @stmsolution
💰 Поддержать монетой:
🥇Bitcoin - bc1q5ve3p8zmcm6z9tapts6padpmnvv572tsujukad
📲 Через кнопку "Спасибо"
👍 Или станьте спонсором канала!
Еще больше видео на моем канале / @stmsolution
Друзья! Не забывайте ставить пальцы в верх если нравится, это очень способствует развитию канала и продвижению видео. Пишите ваши вопросы и замечания, постараюсь на все ответить.
Если вам нравится видео, вы можете его поддержать лайком а так же, при желании, поддержать канал монетой
🎊 stm-solution.diaka.ua/donate
🥇Bitcoin - bc1q5ve3p8zmcm6z9tapts6padpmnvv572tsujukad
📲 Через кнопку "Спасибо"
👍 Или станьте спонсором канала!
Просто золоті уроки! Дякую. Таких в ютубі на цю тематику практично немає. Дякую! Дивно, що так мало аудиторії ще. Але, автор, ще все попереду!
Спасибо, можете поспособствовать в наборе аудитории лайками видео и репостами ))))
@@stmsolution я активно так і роблю) таких людей треба підтримувати
Спасибо
Круто, то что давно искал , очень полезно. Благодарю за видео 👍
Спасибо за урок! А возможно ли создать автоматический скрипт для копирования конкретной строки в БД каждый день (в определенное время) не открывая таблицу. Дайте ссылку, пожалуйста, если уже есть подобное видео. Буду очень благодарен.
Спасибо за урок. Как всегда все доходчиво и без воды.
Спасибо что смотрите.
Отличные уроки!
Очень интересно и полезно :) А главное - понятно! Спасибо!
На здоровье
Отличные уроки
Спасибо
Ролику 3 года, но все же. 9:28 последняя строка не работает очищение указанного диапазона. Возможно версия Apps устаревшая. Работает по другому немного:
var clear = ss1.getRange(2, 1, 1, 5); // собрать в переменную диапазон для удаления данных (строка, столбец, строк, столбцов)
clear.clear(); // удалить указанный в переменной диапазон
Так работает!
Добрый день! Как вы заранее сделали выпадающий список значений и необходимых полей? Расскажите об этом в отдельном видео или чуть ниже здесь.Спасибо!
Об этом есть видео, смотрите плейлист по Гугл таблицам, там в самых первых уроках
Спасибо за Ваши уроки.
Скажите, пожалуйста, зачем объявлять переменную "values" второй раз и зачем в неё заносить операцию "ss2.getRange(lr+1,1,1,lc).setValues(values)". Ведь данная операция сама по себе прописанная:
ss2.getRange(lr+1,1,1,lc).setValues(values);
нормально отработает.
Также непонятно, зачем в переменную заносить операцию "ss1.getRange(2,1,1,5).clearContent()"?
Добрый, все верно, но для новичков так понятнее.
Агонь!
Доброго времени спасибо за отличные уроки. Очень полезный скрип. Подскажите как можно реализовать определенную задачу. Данные вносятся в таблицу при этом есть столбец оплата - как сделать так что-бы сумма оплаты записывалась в новую таблицу при изменении статуса оплаты ДА/НЕТ, и подтягивала два значения, сумму и № заказа. в новую строку, но на строку выше как в макросе (в одном из Ваших уроков). Есть еще условие, исходные данные постоянно вносятся в новую строку.
Спасибо, очень коротко и по существу.
Подскажите пожалуйста, как можно реализовать такой же перенос данных, но с одним нюансом:
таблица-форма, из которой будут переноситься данные, не такая же, как таблица, в которую эти данные будут переноситься.
Например, она не горизонтальная, а вертикальная.
Есть возможность не просто переносить всю строку из одной таблицы в другую, а например привязывать отдельно каждую ячейку (из которой перенести и в которую вставить)?
Я приветствую Вас! Благодарю за Ваш контент и старания - смотрю все видео взахлеб.
У меня к Вам ВОПРОС:
Как можно делать поиск пустой строки, но в НУЖНОМ ДЛЯ МЕНЯ диапазоне колонок? Буду очень благодарен за ответ.
Указывайте диапазон в getRange("C:C").getValues()
@@stmsolution а как искать то последнюю заполненную строку?
Добрый день.
Подскажите: данный скрипт переносит данные из листа1 , в лист2. В листе2 есть формулы, соответственно getLastRow думает, что ячейка с формулой и есть последняя и добавляет данные ниже нее.В итоге строка с формулой остается пустой.Как можно обойти этот момент?
Я не в курсе, но наверно это будет active row (-1) вставить строку
офигенненько) спасибо!)
Рад что полезен, отблагодарить можете лайками и репостами в соцсети. Спасибо.
Привет, отличный урок. А как выделить и вставить таблицу у которой постоянно меняется количество строк?
Благодарю за уроки! Возник вопрос: как сделать так, что бы скрипт работал в фоновом режиме, и как только в первой таблице появлялись данные, он их переносил в другую таблицу автоматически? Без кнопок, и опций в меню, т.е без вмешательства.
Смотрите дальше, там как раз есть ответ, вам нужен триггер
Или я что-то упустил, или у вас ошибка в строке 47 fomatOnly:true. пропустили букву r в следствии чего формат на самом деле не очистился. Только не пойму почему система не выдает ошибку, а все работает.
Решил по Вашему уроку сделать вертикальную форму для заполнения таблицы. Не получилось values из столбца развернуть сразу в строки. Пришлось значения добавлять по одному. Можете подсказать способ?
Спасибо, опять полезные лайф хаки.
Может преждевременно: как правильно добавлять в ячейку в зависимости от содержания данных в таблице checkbox/флажок через скрипт (мануал гугл что-то не помог:).
👍👍👍👍🖐🤝
Если Вас незатруднит побольше уроков....
И вопрос, допустим в стобце "С" идет вичисление по дате формулой, чтоб когда в столбце "С" получалось число больше 3, ячейка в стобце рядом т.е. "В" затиралась
Тут необходимо делать перебор через цикл for а внутри использовать условия if в котором и прописывать все
@@stmsolution спасибо, но я ничего не понял)))былбы неплохой урок....
До этого дойдем, пока что не много времени для канала, есть основная работа, которая забирает много времени, но на эту тему уроки будут
@@stmsolution спасибо, ждем с нетерперием продолжения уроков.
Пока что можете поддержать меня лайками и репостами видео в соцсетях. Это способствует увеличению скорости выхода видео;)
А будут ли потом уроки по созданию сайдбаров? чтобы можно было в диалоговое окно добавлять данные и потом разносить их по нужным листам
Возможно, опишите подробнее что вы хотели бы узнать
@@stmsolution создание HTML кода на сайдбаре, через какие команды могут заносится данные, и какими методами идёт взаимодействие между данными введёнными в сайдбаре и таблицей
Отличный вопрос, мне тоже было бы интересно узнать
Подскажите, пожалуйста, как можно найти последнюю строку/последний столбец в определённом столбце/строке, а не по всему листу?
Надо писать свою функцию, обычными методами Гугла не получится
@@stmsolution Спасибо за информацию!
Добрый день! Можно уточнить, как правильнее обрабатывать событие onChange? При добавлении строки нужно в динамике в несколько ячеек этой строки дописать несколько формул. Изначально номер строки неизвестен. Соответственно, нужно, чтобы скрипт отследил факт добавления строки и смог бы определить её номер. Спасибо!
Надо получать активный диапазон, дальше получать getRow(), дальше уже пишем условие нужное вам.
@@stmsolution спасибо, к этому моменту уже разобрался :). В обработчике onChange по типу EDIT получается последняя строка и дальше уже дописываются формулы. Очень Удобно. Если поставить проверку активного листа и учитывать специфику добавления инфы в конкретный лист, метод становится универсальным 👍
А чи можете ще пояснити як скопіювати декілька строчок з одного листа в інший, але тільки ті строчки, де в колонці J є хоч якісь значення? Якщо можна - поясніть як для початківця. Дякую
Выбрать диапазон с данными и пробежаться циклом по всем строчкам, при совпадении записывать номер строки в массив, а после уже по массиву свой цикл со строчками запустить
Привет, а можно ли принудительно пересчитать формулу в ячейке?.
Я вставил туда формулу =IMPORTHTML() и мне надо чтобы она пересчитывалась например 1 раз в минуту.
Я уже пробовал очищать формулу и вставлять заново, чтобы она пересчиталась, но скрипт так быстро отрабатывает, что походу формула не успевает отрагировать.
Если в одной функции сделать очищение формулы, а в другой вставку, то тоже работает, т.к. проходит какое-то время и Google Shets обновляет формулу и пересчитывает.
Если сделать последовательно запуск двух функций, то опять скрипт быстро отрабатывает и Google Shets не успевает отреагировать на изменения.
Пробовал между ними вставлять функцию sleep(), скрипт останавливается, но первая функция при этом не отрабатывает, т.к. ячейки не очищаются, а при вставке формулы второй функцией, Google Shets не успевает отреагировать на изменения.
Вообщем не могу понять как связать две функции, чтобы они отрабатывались последовательно и Google Shets успел бы отреагировать на изменения формул.
Добрый вечер, как, при внесении через Лист1 данных , защитить лист ДБ от ручного изменения?
Посмотрите метод protect()
А итоговый код где то публикуется? Часто бывает так что нет времени набирать
Спасибо за видео! Очень полезно!
Пробую вставить определенное количество строк после. Выдает ошибку: Exception: The parameters (number,number) don't match the method signature for SpreadsheetApp.Sheet.insertRowAfter.
Скрипт такой:
function insRows() {
var ss = SpreadsheetApp.getActiveSpreadsheet();
var sheet = ss.getActiveSheet();
var range = sheet.getActiveRange();
var numberOfrooms = range.getValue();
var row = range.getRow();
var col = range.getColumn();
sheet.insertRowAfter(row,numberOfrooms);
Logger.log(row);
Logger.log(col);
}
Никак не пойму, в чем ошибка!
Это понятно, если строки все пустые. А если строки с A по E заполнены и мне нужно дозаписывать данные в F ? как мне найти последнюю свободную ячейку в F именно?
свою функцию надо писать, на пример которая будет брать весь столбец, получать из него значения, и идти не снизу в верх в цикле, а сверху в низ и останавливать тогда когда попадется первая не пустая ячейка, это и будет последней строкой конкретного столбца + 1, так как массивы стартуют с нулевого индекса
Я не пойму: суть коддинга на JS состоит в том, чтобы придумывать невероятную кучу переменных?
Каждое объявление переменной разве не жрет память?
Если без них не обойтись то надо делать
Добрый день, а можно ли через onEdit триггер дописать в скрипте чтобы при заполнении в Листе3 данные автоматически сохранялись в БД и затем очищались в Листе3? и еще вопрос можно ли через скрипты или другие инструменты из таблиц сохранять данные в Google Keep в виде заметок с ярлыками?
конечно, можно триггер установить проводить эту процедуру при изменении. С keep не сталкивался, для таких задач лучше на мой взгляд использовать гугл календарь, там точно можно делать временные заметки.
@@stmsolution 👍👍👍👍🖐🤝
Если Вас незатруднит побольше уроков....
И вопрос, допустим в стобце "С" идет вичисление по дате формулой, чтоб когда в столбце "С" получалось число больше 3, ячейка в стобце рядом т.е. "В" затиралась
Как вы подсвечиваете какие значения могу быть у метода все варианты? И ещё потом с ними печатаете(время 2:59)
Сама среда разработки подсказывает, ещё можно Ctrl+ пробел нажать, должно сработать
Подскажите , а как быть в том случае когда скопировать нужно не одну строку , а в зависимости от количества проданного товара , строк может быть от 1 до 100. Как сделать что бы скрипт автоматически выдел заполненные строки и точно так же вставил в другую таблицу , в свободную строку .
Надо брать весь массив фильтровать по критерию через filter, и получать длинну этого отфильтрованного массива, через length, и после эту длинну ставить как количество строк в диапазоне который надо брать
Как перенести группу ячеек на другой лист со всем форматированием: шрифт, цвет ячейки и т.д. Спасибо, за уроки очень помогают.
sheet.getRange().copyTo(range)
Как пустить на печать после добавления в базу эту строку, ну или выделенный диапазон распечатать, например, на двух листах, так что бы нажал на изображение с макросом и началась печать без всяких лишних окон, как это в Excel происходит
на этот вопрос не могу дать, ответ, на сколько знаю, никак, так как интерфейс браузера, который отвечает за запуск печати, не относится к гугл таблицам и в этом то и вся загвоздка. Только вручную
Спасибо за урок! Очень полезно.
Подскажите, пожалуйста, что нужно добавить в скрипт, чтобы переносились строки только с определённым значением в первом столбце?
Через if(a1===1){тело скрипта}
STM Solution Спасибо!
а как осуществить то же самое копирование определенного набора данных, но только не на другой лист, а в совсем другую файл-таблицу?
Смотрите в следующих видео)) а вообще за это отвечает метод SpreadsheetApp.openById()
Добрый день. Пробовал сделать ,что бы записывалось со здвигом вниз. function addToDatabase(){
var ss =SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Аркуш2");
var ss1 =SpreadsheetApp.getActiveSpreadsheet().getSheetByName("БД");
var ss3 =SpreadsheetApp.getActiveSpreadsheet();
var sheet =ss3.getSheetByName("БД");
var values =ss.getRange(2,1,1,5).getValues();
var lr= ss1.getLastRow();
var lc= ss1.getLastColumn();
var range=sheet.getRange("a1");
var row= range.getRow() ;
sheet.insertRowAfter(row);
var values =ss1.getRange(lr+1 ,1,1,lc ).setValues(values);
Logger.log(values );
Строчку вставляет, но данные не записывает .Как сделать, что бы старые данные смещались вниз
inserRowsBefore
Можно ли у вас заказать таблицу ?
Можно , пишите mitra654491@gmail.com
подскажите ! как после отправки в базу данных сделать что бы очистились только 2 ячейки ( продавец ) (
Товар)
Указать в getRange() нужный диапазон
Надеюсь есть кто живой, как сделать, чтобы он вставлял не снизу, а справа допустим?
Просто пропиши по последней колонке +1
аааааа помогите) Не могу вкурить как вставить активный (выбранный) диапазон значений на другой лист , но чтобы не было привязки к точному getRange(lr+1,1,1,lc). А чтобы сколько выбрал строк и столбцов столько и вставил.
Тут разобрался:
var values = ss1.getRange(1,1,1,7) - это, сменил на это var values = ss1.getActiveRange() чтобы использовать выбранный диапазон, а как быть тут? getRange(lr+1,1,1,lc). спасите помогите)извините пожалуйста, что тут пишу по этой просьбе.Спасибо)
getActiveRange().getValues() и дальше уже узнавайте длинну массива и вставляйте
@@stmsolution getNumColumns();
activeRange.getNumRows();
так?
Добрый день, скрипт один в один....при нажатии разносит везде дату по 5-ти колонкам и тд далее на строчку ниже...не могу найти ошибку. Посмотрите пожалуйста
function addToDatabase() {
var ss1 = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Лист2"); // доступы к листам активной таблицы
var ss2 = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("БД");
var values = ss1.getRange(2, 1, 1, 5).getValues();
Logger.log(values);
var lr = ss2.getLastRow();
var lc = ss2.getLastColumn();
var values = ss2.getRange(lr+1, 1, 1, lc).setValue(values);
}
var values = ss2.getRange(lr+1, 1, 1, lc).setValue(values); не совсем один в один, в этой строчке s пропустили))) setValues(values);
@@ElenaSagan-z7r час не мог понять в чем проблема, спс
Как переместить с одного листа в другой ту строку которую я выделю а не ту которую прописана в скрипте.
Надо получить активный диапазон и после получить эту строку и дальше указать в getRange строку столбец и длинну строки все, в предыдущем уроке я показывал как раз один из моментов определения активной строки и столбца
Я понял.У меня есть база там очень много строк.Я хочу например выделять любую из них и перемещеть в другой лист через кнопку.С кнопкой и перемищением проблем нет.Проблема только в том что я хочу перемещать ту строку которую мне нужна ту которую я выделил!Например выделил 5 строку тыкнул на кнопку и перемистил,потом выделил 36 строку тыкнул кнопку и перемистил.
var activeRow = ss.getActiveRange().getRow() и потом в переменную записываем getRange(activeRow, col и тд)
не получается.Мне нужно получить значение из выделеной строки
Метод getValues, вам поможет. Пересмотрите ещё раз мои предыдущие уроки там есть информация нужная вам.
А как найти последнюю строку только во втором столбце?
Только своей функцией
а можно копию данного скрипта?
docs.google.com/spreadsheets/d/1V-3vmsrJ6AT5Y1_liw76_2J8XhNT23sOLWK5uB3OtuI/edit?usp=sharing Делайте себе копию.
@@stmsolution спасибо
Что то у тебя одни геты. А как вводить из скрипта значения в таблицу к тебя нет урока. И как форматировать введенные данные.
Дальше смотрите, все есть
function addToDatabase() {
var ss1 = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("главное");
var ss2 = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Журнал регистрации");
var values = ss1.getRange('G4'). getValues();
Logger.log(values);
var lr = ss2.getLastRow();
var lc = ss2.getLastColumn();
var values = ss2.getRange(lr+1, 1, 1, lc). setValues(values);
}
ошибка выходить в getLastRow()
Здравствуйте! такая ошибка выходит. photos.app.goo.gl/VvJCkYsTbhZw4xCF7
getSheetByName() регистр важен,внимательно посмотрите как у вас написано
@@stmsolution Спасибо!