Скрипт Google apps в листах. Постепенно скрывайте строки каждую неделю

#for-loop #google-apps-script #rows

Вопрос:

У меня есть еженедельный планировщик (кстати, можно бесплатно скопировать, вы можете изменить первую дату, и она будет меняться в течение всего года).

Мне нужно скрывать 23 строки каждую неделю, чтобы отображалась текущая неделя. сначала это будет 23 строки, на следующей неделе будет скрыта строка 46, через неделю после следующей 69 и т. Д. Я попытался зациклить его с помощью оператора for внутри другого for.

 function hideRowsWeekStart() {
  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var sheet = ss.getSheetByName('Nedēļas_plānotājs');
  // Hides rows up to certain row (rowIndex, finalRow)
     
   for (finalRow = 1; finalRow <= 23; finalRow  )  {
     for(n = 1; n < 23; n  ) {
        sheet.hideRows(1,finalRow[n])
      }
    }
}
 

но это бросает это
введите описание изображения здесь

Попробовал один экземпляр for, и он скрывает только 23 строки.

 for(n = 1; n < 23; n  ) {
    sheet.hideRows(1, n)
}
 

Было бы проще просто удалить строки, так как тогда следующие строки будут просто пересчитаны с 1, но мне нужны скрытые строки на случай, если мне понадобится оглянуться назад и показать их, обращаясь к незавершенным или пропущенным вещам.

Комментарии:

1. Обозначение finalRow[n] означает, что finalRow массив is. Но это всего лишь цифра. Число не имеет внутренних элементов, которые вы не можете использовать [n] с числом.

2. Но от меня ускользает, как это должно работать. Вы хотите скрыть/отобразить последние 23 строки над строками текущей недели? Попробуйте более подробно описать свой рабочий процесс.

3. каждые 23 строки на следующей неделе. 23, следующая будет до строки 46, следующая 69 и т. Д.

4. Я бы предложил решение следующим образом: при каждом запуске скрипт будет скрывать 23 нераскрытые строки из верхней части вашей таблицы. это нормально?

5. И, кстати, вы можете сгруппировать любые диапазоны строк, а затем сложить/развернуть группы в один клик. Вероятно, имеет смысл попробовать и это. Это можно сделать/отменить вручную и с помощью скрипта

Ответ №1:

Базовый код, который выполняет эту работу, находится здесь:

 function hide_23_rows() {
  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var sheet = ss.getSheetByName('Nedēļas_plānotājs');
  var last_row = sheet.getLastRow();

  // get the last unhidden row
  for (var row = 1; row < last_row; row  = 23) {
    if (!sheet.isRowHiddenByUser(row)) break;
  }

  // hide next 23 rows after first unhidden row
  sheet.hideRows(row, 23);
}
 

Вероятно, имеет смысл создать функцию, которая отображает строки за прошлую неделю. И добавить эти две функции в пользовательское меню. Таким образом, вы можете скрыть и показать предыдущую неделю вручную в любое время. Дай мне знать, если тебе это понадобится.

Обновить

Вот расширенный вариант кода:

 function hide_23_rows() {
  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var sheet = ss.getSheetByName('Nedēļas_plānotājs');
  var last_row = sheet.getLastRow();

  // get last unhidden row
  for (var row = 1; row < last_row; row  = 23) if (!sheet.isRowHiddenByUser(row)) break;

  // hide next 23 rows
  sheet.hideRows(row, 23);
}

function show_23_rows() {
  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var sheet = ss.getSheetByName('Nedēļas_plānotājs');
  var last_row = sheet.getLastRow();

  // get last unhidden row
  for (var row = 1; row < last_row; row  = 23) if (!sheet.isRowHiddenByUser(row)) break;

  if (row < 24) return; // no hidden rows on the sheet

  // show previous 23 rows
  sheet.showRows(row-23, 23);
}


// -----------------------------------------------

// custom menu
function onOpen() {
  SpreadsheetApp.getUi().createMenu('🪄 Scripts')
  .addItem('🔞 Hide previous week', 'hide_23_rows')
  .addItem('👀 Show previous week', 'show_23_rows')
  .addToUi();
}
 

Он создает пользовательское меню «Сценарии», и вы можете скрыть и отобразить последние 23 строки через меню.

введите описание изображения здесь

Комментарии:

1. Да, я также был бы рад включить такое мышление.

2. И попробуйте сгруппировать строки. Возможно, стандартной группировки будет достаточно, не скрываясь.

3. Также интересный вариант, но к тому времени, когда планировщик завершится через полгода, у меня будет около 26 строк, начиная с верхней части листа (учитывая, что полный год составляет 52 недели).