首页 > 解决方案 > 表单中的 Google 应用程序脚本。每周逐步隐藏行

问题描述

我有一个每周计划(顺便说一句,免费复制,你可以更改第一个日期,它会改变一整年)。

我需要每周隐藏 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 的事情。

标签: for-loopgoogle-apps-scriptrows

解决方案


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

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 行。

在此处输入图像描述


推荐阅读