Google 表格应用脚本:有条件地隐藏或显示列

Google Sheets App Script: Conditional hide or show columns

我正在尝试根据列 A3:A 中的值隐藏或显示值。

本质上,循环遍历所有sheet,如果A列的值为“HIDE”,则隐藏该行。如果 A 列中的值为“SHOW”,则显示该行。目前 运行 它来自设置页面上的按钮。

我原来的尝试:

function fourthTry(){
  
  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var sheets = ss.getSheets();
  var rowsToCheck = 198;
  var columnsToCheck = 1;

  // ** Loop Through every sheet **
  for (var i = 0; i < sheets.length; i++ ){
    Logger.log("i: " + i)
    var activeSheet = ss.getActiveSheet();
    // ** Loop through every cell in Row A **
      
      for (var j=0; j < rowsToCheck ;  j++){
        Logger.log("j: " + j);
        var range = activeSheet.getRange(rowsToCheck,columnsToCheck);
        var rangeValue = range.getValue();
        Logger.log("rangeValue: " + rangeValue);

        // IF cell contains HIDE, hiderow
        if(rangeValue == "HIDE"){
          Logger.log("Hidden value: " + rangeValue);
        }
        // IF cell contains SHOW, showrow

      }

  }

我也愿意接受一种完全不同的方法,只要它根据所有 sheet 行 A 中的文本隐藏和显示列即可。

The Setup Page

Structure of the page where I want to hide columns based on value

**基于答案的固定代码:

/** 
* TITLE:
*     Hide a row if row 1 contains the text "HIDE" 
*     Show a row if row 1 contains the text "SHOW"
*/

function UpdateCategories(){
  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var sheets = ss.getSheets();

  // ** Loop Through every sheet **
  for (var i = 0; i < sheets.length; i++ ){


    var lastRow = sheets[i].getLastRow();

    var activeSheet = sheets[i];
    Logger.log("===== " + activeSheet.getSheetName() + " =====");


    // ** Loop through every cell in Row A **
      for (var j=1; j < lastRow ;  j++){
        var range = activeSheet.getRange(j,1);
        var rangeValue = range.getValue();
        //Logger.log(j + ". " + rangeValue);

        // IF cell contains HIDE, hiderow
        if(rangeValue == "HIDE"){
          //Logger.log(j + ". " + rangeValue);
          activeSheet.hideRows(j);
        }

        if(rangeValue == "SHOW"){
          //Logger.log(j + ". " + rangeValue);
          activeSheet.showRows(j);
        }
        // IF cell contains SHOW, showrow
      }
  }
}

您的问题在这里:var range = activeSheet.getRange(rowsToCheck,columnsToCheck);

它总是 var range = activeSheet.getRange(lastrow,1); 但它需要遍历行。所以它需要是这样的:

var range = activeSheet.getRange(i+startrow,1); 无论数据的起始行是什么。使用 setValues() 可以更快地遍历数据,但我会把它留给您自己调查