Excel это не сложно
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
28.03.2024, 11:57:03

Войти
Название темы должно отражать её содержание.
Темы типа "ПОМОГИТЕ!!!", "Срочно!", "Не получается сделать", "Нужна помощь" и т.п. будут удаляться без объяснения причин
33 233 Сообщений в 5 454 Тем от 6 750 Пользователей
Последний пользователь: Alex1210
*
Перейти на сайт Хитрости Надстройка MulTEx Обучающие тренинги Наша группа ВКонтакте
Правила форума Начало Помощь Поиск Календарь Войти Регистрация Выйти
+  Excel это не сложно
|-+  Основные форумы
| |-+  Вопросы по работе в Google-таблицах
| | |-+  Скрипт для гугл таблицы - скрыть строки по условию
Страниц: [1]   Вниз
Печать
Автор Тема: Скрипт для гугл таблицы - скрыть строки по условию  (Прочитано 7146 раз)
0 Пользователей и 1 Гость смотрят эту тему.
Иулия
Новичок
*

Репутация: +0/-0
Офлайн Офлайн

Сообщений: 22


Просмотр профиля
« : 24.06.2022, 14:46:02 »

Здравствуйте! У меня работает макрос в Excel, который по заданному условию скрывает строки, но как его можно наложить на Гугл таблицу? Кто-нибудь может помочь) я так понимаю, что скрипты для гт пишутся иначе, найти подходящий вариант не смогла. Пожалуйста, помогите! Прикладываю макрос, которым пользуюсь в ексель. С уважением)
Записан
Дмитрий Щербаков(The_Prist)
Администратор
Ветеран
*****

Репутация: +485/-0
Офлайн Офлайн

Сообщений: 5 828



Просмотр профиля WWW
« Ответ #1 : 24.06.2022, 15:34:43 »

Добрый день.
Не надо макрос, который в Excel используете. Опишите, как хотите видеть реализацию в Google. В общем случае код может выглядеть так(скрытие всех строк в таблице, значение второго столбца которых меньше 2):
Код: (vb)
function HideRowsByCondition() {
  var doc = SpreadsheetApp.getActiveSpreadsheet();
  var sheet = SpreadsheetApp.getActiveSheet();
  var lastRow = SpreadsheetApp.getActiveSheet().getLastRow();

  for (var i = lastRow; i > 0; i--) {
    var range = sheet.getRange(i,2);
    var cellVal = range.getValue();
    if (cellVal < 2) {
       sheet.hideRows(i);
      }
    else{
       sheet.showRows(i);
      }
    }
}
« Последнее редактирование: 24.06.2022, 15:39:32 от Дмитрий Щербаков(The_Prist) » Записан

Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы...
Пункты приёма Спасибов:    -41001332272872  -R298726502453
Иулия
Новичок
*

Репутация: +0/-0
Офлайн Офлайн

Сообщений: 22


Просмотр профиля
« Ответ #2 : 24.06.2022, 17:37:55 »

У меня есть таблица с данными, в одном столбце ее действия или статусы, что сделать, и как только действие/статус сменяется на "На подпись", то целиком строчка с таким статусом скрывается. Статусов вариантов много, но скрывается только этот.
Записан
Дмитрий Щербаков(The_Prist)
Администратор
Ветеран
*****

Репутация: +485/-0
Офлайн Офлайн

Сообщений: 5 828



Просмотр профиля WWW
« Ответ #3 : 24.06.2022, 17:54:12 »

Код: (vb)
function onEdit(e) {
  const specificSheet = "Лист2"   // имя листа, на котором будет отслеживание изменения значений ячеек
  const specificCellColumn = 2   // номер столбца для отслеживания изменений

  let sheetCheck = (e.range.getSheet().getName() == specificSheet)
  let cellCheck = (e.range.getColumn() == specificCellColumn)

  if (!(sheetCheck && cellCheck)) {
    return
  }
  else {
    var cellVal = e.range.getValue();
    if (cellVal == "На подпись") {
      e.range.getSheet().hideRows(e.range.getRow());}
  }
}
Записан

Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы...
Пункты приёма Спасибов:    -41001332272872  -R298726502453
Иулия
Новичок
*

Репутация: +0/-0
Офлайн Офлайн

Сообщений: 22


Просмотр профиля
« Ответ #4 : 24.06.2022, 18:09:44 »

Спасибо огромное, что помогаете) начало работать, но выдает ошибку, см.вложение
Записан
Иулия
Новичок
*

Репутация: +0/-0
Офлайн Офлайн

Сообщений: 22


Просмотр профиля
« Ответ #5 : 24.06.2022, 18:12:31 »

Спасибо огромное, что помогаете) начало работать, но выдает ошибку, см.вложение
Не могу вложить
Cannot read property 'range' of undefined
Записан
Дмитрий Щербаков(The_Prist)
Администратор
Ветеран
*****

Репутация: +485/-0
Офлайн Офлайн

Сообщений: 5 828



Просмотр профиля WWW
« Ответ #6 : 24.06.2022, 18:23:43 »

Понимаете в чем тут дело...На моей таблице все работает. Что там в Вашей и где именно надо что смотреть - знаете только Вы. У меня статусы предполагались во втором столбец(т.е. В). И все там работает.
Поэтому в правилах и написано, что нужен ВАШ пример(в данном случае ссылка на документ).
Записан

Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы...
Пункты приёма Спасибов:    -41001332272872  -R298726502453
Иулия
Новичок
*

Репутация: +0/-0
Офлайн Офлайн

Сообщений: 22


Просмотр профиля
« Ответ #7 : 26.06.2022, 13:53:51 »

Понимаете в чем тут дело...На моей таблице все работает. Что там в Вашей и где именно надо что смотреть - знаете только Вы. У меня статусы предполагались во втором столбец(т.е. В). И все там работает.
Поэтому в правилах и написано, что нужен ВАШ пример(в данном случае ссылка на документ).
Готово, доступ на редактирование настроила)
https://docs.google.com/spreadsheets/d/14nl3VlyC8-2mFISwJdtcK9CXk4wWctyVDsb3q5Y6bbo/edit?usp=sharing
Записан
Иулия
Новичок
*

Репутация: +0/-0
Офлайн Офлайн

Сообщений: 22


Просмотр профиля
« Ответ #8 : 26.06.2022, 13:56:54 »

Код: (vb)
function onEdit(e) {
  const specificSheet = "Лист2"   // имя листа, на котором будет отслеживание изменения значений ячеек
  const specificCellColumn = 2   // номер столбца для отслеживания изменений

  let sheetCheck = (e.range.getSheet().getName() == specificSheet)
  let cellCheck = (e.range.getColumn() == specificCellColumn)

  if (!(sheetCheck && cellCheck)) {
    return
  }
  else {
    var cellVal = e.range.getValue();
    if (cellVal == "На подпись") {
      e.range.getSheet().hideRows(e.range.getRow());}
  }
}

Супер, все работает! Спасибо огромное!
Записан
Иулия
Новичок
*

Репутация: +0/-0
Офлайн Офлайн

Сообщений: 22


Просмотр профиля
« Ответ #9 : 26.06.2022, 14:04:03 »

Единственный момент, если я раскрыла, нажав на стрелочки, то как закрыть их опять (см.снимки)
Записан
Дмитрий Щербаков(The_Prist)
Администратор
Ветеран
*****

Репутация: +485/-0
Офлайн Офлайн

Сообщений: 5 828



Просмотр профиля WWW
« Ответ #10 : 27.06.2022, 14:33:25 »

Выше(первое же сообщение) есть скрипт, который скрывает все строки со значением "На подпись". Или примените фильтр.
Записан

Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы...
Пункты приёма Спасибов:    -41001332272872  -R298726502453
Иулия
Новичок
*

Репутация: +0/-0
Офлайн Офлайн

Сообщений: 22


Просмотр профиля
« Ответ #11 : 27.06.2022, 20:58:19 »

Выше(первое же сообщение) есть скрипт, который скрывает все строки со значением "На подпись". Или примените фильтр.
Вот этот?
function HideRowsByCondition() { 
  var doc = SpreadsheetApp.getActiveSpreadsheet(); 
  var sheet = SpreadsheetApp.getActiveSheet(); 
  var lastRow = SpreadsheetApp.getActiveSheet().getLastRow(); 
 
  for (var i = lastRow; i > 0; i--) { 
    var range = sheet.getRange(i,2);   
    var cellVal = range.getValue(); 
    if (cellVal < 2) { 
       sheet.hideRows(i); 
      } 
    else{ 
       sheet.showRows(i); 
      } 
    } 

Я его применила для чисел, у меня работает, но куда необходимо вставить "На подпись", вставляю вместо "< 2" скрывает все.
Записан
Иулия
Новичок
*

Репутация: +0/-0
Офлайн Офлайн

Сообщений: 22


Просмотр профиля
« Ответ #12 : 27.06.2022, 23:08:01 »

Вот этот?
function HideRowsByCondition() { 
  var doc = SpreadsheetApp.getActiveSpreadsheet(); 
  var sheet = SpreadsheetApp.getActiveSheet(); 
  var lastRow = SpreadsheetApp.getActiveSheet().getLastRow(); 
 
  for (var i = lastRow; i > 0; i--) { 
    var range = sheet.getRange(i,2);   
    var cellVal = range.getValue(); 
    if (cellVal < 2) { 
       sheet.hideRows(i); 
      } 
    else{ 
       sheet.showRows(i); 
      } 
    } 

Я его применила для чисел, у меня работает, но куда необходимо вставить "На подпись", вставляю вместо "< 2" скрывает все.
Я придумала) я создала еще колонку, где прописала формулу Если..., то , совместила два скрипта и у меня все получилось)
Записан
Дмитрий Щербаков(The_Prist)
Администратор
Ветеран
*****

Репутация: +485/-0
Офлайн Офлайн

Сообщений: 5 828



Просмотр профиля WWW
« Ответ #13 : 28.06.2022, 09:23:49 »

Вы уж извините, но можно же было аналогию-то провести хоть какую-то Улыбка
Вместо условия
Код: (vb)
 if (cellVal < 2) {

пишите
Код: (vb)
 if (cellVal == "На подпись") {

как в другом коде
Записан

Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы...
Пункты приёма Спасибов:    -41001332272872  -R298726502453
Иулия
Новичок
*

Репутация: +0/-0
Офлайн Офлайн

Сообщений: 22


Просмотр профиля
« Ответ #14 : 29.06.2022, 22:06:43 »

Комментарий администратора Не цитируйте сообщения полностью - достаточно выделить нужную фразу и нажать ЦИТИРОВАТЬ. п.п. 4.18 Правил форума
А я так и делала, но = ставила один раз))))
Но честно, в итоге здорово получилось с двумя скриптами, один закрывает (я ещё кнопку сделала для него), если вдруг раскрыли, а второй скрывает при замене статуса)) спасибо Вам за помощь!😊
« Последнее редактирование: 30.06.2022, 15:28:37 от Дмитрий Щербаков(The_Prist) » Записан
Страниц: [1]   Вверх
Печать
Перейти в:  

Powered by MySQL Powered by PHP Powered by SMF 1.1.21 | SMF © 2006-2011, Simple Machines Valid XHTML 1.0! Valid CSS!
Яндекс.Метрика Рейтинг@Mail.ru