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

大卫·戴维

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

本质上,循环浏览所有工作表,如果A列中的值为“ HIDE”,则隐藏该行。并且如果列A中的值为“ SHOW”,则显示该行。当前从设置页面上的at按钮运行。

  • 循环浏览所有工作表
    • 循环通过工作表A行的单元格
      • 如果单元格包含“ HIDE”,则隐藏该行
      • 如果单元格包含“ 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

      }

  }

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

设置页面

我想根据值隐藏列的页面结构

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

/** 
* 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()遍历数据,但我将留给您自己研究

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章