Google 工作表中的应用程序脚本。每周逐渐隐藏行

Google apps script in sheets. Progressively hide rows each week

我有一个weekly planner(顺便说一下,免费复制,你可以更改第一个日期,它会在全年更改)。

我每周需要隐藏 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 开始重新计算,但我需要隐藏这些行,以防我可能需要回顾并取消隐藏它们以解决未完成或 WIP 的问题。

完成工作的基本代码在这里:

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();
}

它创建自定义菜单 'Scripts',您可以通过菜单隐藏和显示最后 23 行。