Excel это не сложно

Основные форумы => Вопросы по работе в Google-таблицах => Тема начата: Иулия от 24.06.2022, 14:46:02



Название: Скрипт для гугл таблицы - скрыть строки по условию
Отправлено: Иулия от 24.06.2022, 14:46:02
Здравствуйте! У меня работает макрос в Excel, который по заданному условию скрывает строки, но как его можно наложить на Гугл таблицу? Кто-нибудь может помочь) я так понимаю, что скрипты для гт пишутся иначе, найти подходящий вариант не смогла. Пожалуйста, помогите! Прикладываю макрос, которым пользуюсь в ексель. С уважением)


Название: Re:Скрипт для гугл таблицы - скрыть строки по условию
Отправлено: Дмитрий Щербаков(The_Prist) от 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);
      }
    }
}


Название: Re:Скрипт для гугл таблицы - скрыть строки по условию
Отправлено: Иулия от 24.06.2022, 17:37:55
У меня есть таблица с данными, в одном столбце ее действия или статусы, что сделать, и как только действие/статус сменяется на "На подпись", то целиком строчка с таким статусом скрывается. Статусов вариантов много, но скрывается только этот.


Название: Re:Скрипт для гугл таблицы - скрыть строки по условию
Отправлено: Дмитрий Щербаков(The_Prist) от 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());}
  }
}


Название: Re:Скрипт для гугл таблицы - скрыть строки по условию
Отправлено: Иулия от 24.06.2022, 18:09:44
Спасибо огромное, что помогаете) начало работать, но выдает ошибку, см.вложение


Название: Re:Скрипт для гугл таблицы - скрыть строки по условию
Отправлено: Иулия от 24.06.2022, 18:12:31
Спасибо огромное, что помогаете) начало работать, но выдает ошибку, см.вложение
Не могу вложить
Cannot read property 'range' of undefined


Название: Re:Скрипт для гугл таблицы - скрыть строки по условию
Отправлено: Дмитрий Щербаков(The_Prist) от 24.06.2022, 18:23:43
Понимаете в чем тут дело...На моей таблице все работает. Что там в Вашей и где именно надо что смотреть - знаете только Вы. У меня статусы предполагались во втором столбец(т.е. В). И все там работает.
Поэтому в правилах и написано, что нужен ВАШ пример(в данном случае ссылка на документ).


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


Название: Re:Скрипт для гугл таблицы - скрыть строки по условию
Отправлено: Иулия от 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());}
  }
}

Супер, все работает! Спасибо огромное!


Название: Re:Скрипт для гугл таблицы - скрыть строки по условию
Отправлено: Иулия от 26.06.2022, 14:04:03
Единственный момент, если я раскрыла, нажав на стрелочки, то как закрыть их опять (см.снимки)


Название: Re:Скрипт для гугл таблицы - скрыть строки по условию
Отправлено: Дмитрий Щербаков(The_Prist) от 27.06.2022, 14:33:25
Выше(первое же сообщение) есть скрипт, который скрывает все строки со значением "На подпись". Или примените фильтр.


Название: Re:Скрипт для гугл таблицы - скрыть строки по условию
Отправлено: Иулия от 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" скрывает все.


Название: Re:Скрипт для гугл таблицы - скрыть строки по условию
Отправлено: Иулия от 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" скрывает все.
Я придумала) я создала еще колонку, где прописала формулу Если..., то , совместила два скрипта и у меня все получилось)


Название: Re:Скрипт для гугл таблицы - скрыть строки по условию
Отправлено: Дмитрий Щербаков(The_Prist) от 28.06.2022, 09:23:49
Вы уж извините, но можно же было аналогию-то провести хоть какую-то :)
Вместо условия
Код: (vb)
 if (cellVal < 2) {

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

как в другом коде


Название: Re:Скрипт для гугл таблицы - скрыть строки по условию
Отправлено: Иулия от 29.06.2022, 22:06:43
Комментарий администратора Не цитируйте сообщения полностью - достаточно выделить нужную фразу и нажать ЦИТИРОВАТЬ. п.п. 4.18 Правил форума (https://www.excel-vba.ru/forum/index.php?topic=2.0)
А я так и делала, но = ставила один раз))))
Но честно, в итоге здорово получилось с двумя скриптами, один закрывает (я ещё кнопку сделала для него), если вдруг раскрыли, а второй скрывает при замене статуса)) спасибо Вам за помощь!😊