Новости:

Интересные и полезные статьи по работе с Excel и VBA
можно найти в разделе ХИТРОСТИ

Главное меню

Скрипт для гугл таблицы - скрыть строки по условию

Автор Иулия, 24.06.2022, 14:46:02

« назад - далее »

Иулия

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

Дмитрий Щербаков(The_Prist)

#1
Добрый день.
Не надо макрос, который в Excel используете. Опишите, как хотите видеть реализацию в Google. В общем случае код может выглядеть так(скрытие всех строк в таблице, значение второго столбца которых меньше 2):
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);
      }
    }
}
Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы...

Иулия

У меня есть таблица с данными, в одном столбце ее действия или статусы, что сделать, и как только действие/статус сменяется на "На подпись", то целиком строчка с таким статусом скрывается. Статусов вариантов много, но скрывается только этот.

Дмитрий Щербаков(The_Prist)

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());}
  }
}
Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы...

Иулия

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

Иулия

Цитата: Иулия от 24.06.2022, 18:09:44
Спасибо огромное, что помогаете) начало работать, но выдает ошибку, см.вложение
Не могу вложить
Cannot read property 'range' of undefined

Дмитрий Щербаков(The_Prist)

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

Иулия

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

Иулия

Цитата: Дмитрий Щербаков(The_Prist) от 24.06.2022, 17:54:12
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());}
  }
}

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

Иулия

Единственный момент, если я раскрыла, нажав на стрелочки, то как закрыть их опять (см.снимки)

Дмитрий Щербаков(The_Prist)

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

Иулия

Цитата: Дмитрий Щербаков(The_Prist) от 27.06.2022, 14:33:25
Выше(первое же сообщение) есть скрипт, который скрывает все строки со значением "На подпись". Или примените фильтр.
Вот этот?
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" скрывает все.

Иулия

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

Дмитрий Щербаков(The_Prist)

Вы уж извините, но можно же было аналогию-то провести хоть какую-то :)
Вместо условия
if (cellVal < 2) {
пишите
if (cellVal == "На подпись") {
как в другом коде
Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы...

Иулия

#14
[admin]Не цитируйте сообщения полностью - достаточно выделить нужную фразу и нажать ЦИТИРОВАТЬ. п.п. 4.18 Правил форума[/admin]
А я так и делала, но = ставила один раз))))
Но честно, в итоге здорово получилось с двумя скриптами, один закрывает (я ещё кнопку сделала для него), если вдруг раскрыли, а второй скрывает при замене статуса)) спасибо Вам за помощь!😊

Яндекс.Метрика Рейтинг@Mail.ru