Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/google-sheets/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Google apps script Google Sheets应用程序脚本:条件隐藏或显示列_Google Apps Script_Google Sheets_Dynamic_Formatting - Fatal编程技术网

Google apps script Google Sheets应用程序脚本:条件隐藏或显示列

Google apps script Google Sheets应用程序脚本:条件隐藏或显示列,google-apps-script,google-sheets,dynamic,formatting,Google Apps Script,Google Sheets,Dynamic,Formatting,我试图根据A3:A列中的值隐藏或显示值 基本上,在所有工作表中循环,如果列A中的值为“HIDE”,则隐藏该行。如果列A中的值为“SHOW”,则显示该行。当前正在从设置页面上的at按钮运行它 循环浏览所有表格 在工作表A行的单元格中循环 如果单元格包含“隐藏”,则隐藏该行 如果单元格包含“显示”,则显示该行 我最初的尝试是: function fourthTry(){ var ss = SpreadsheetApp.getActiveSpreadsheet(); va

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

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

  • 循环浏览所有表格
    • 在工作表A行的单元格中循环
      • 如果单元格包含“隐藏”,则隐藏该行
      • 如果单元格包含“显示”,则显示该行
我最初的尝试是:

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

      }

  }
函数第四次(){
var ss=SpreadsheetApp.getActiveSpreadsheet();
var sheets=ss.getSheets();
var rowsToCheck=198;
var-columnsToCheck=1;
//**在每张纸上循环**
对于(变量i=0;i
我也愿意采用完全不同的方法,只要它根据所有工作表的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
      }
  }
}
/**
*标题:
*如果第1行包含文本“隐藏”,则隐藏一行
*如果第1行包含文本“Show”,则显示一行
*/
函数UpdateCategories(){
var ss=SpreadsheetApp.getActiveSpreadsheet();
var sheets=ss.getSheets();
//**在每张纸上循环**
对于(变量i=0;i
您的问题在这里:
var range=activeSheet.getRange(rowsToCheck,columnsToCheck);

它总是
var range=activeSheet.getRange(lastrow,1);
但是它需要遍历行。因此它需要如下所示:


var range=activeSheet.getRange(i+startrow,1);
无论数据的起始行是什么。使用setValues()迭代数据有更快捷的方法,但我将留给您自己调查

Welcome,the DavideLight!您能澄清为什么“显示”吗选项是必需的?默认情况下,不会显示所有行,除非它们被此脚本隐藏,因为它们在列A中有“Hide”?除非您有另一个脚本放置“Show”在隐藏行中,但不同时取消隐藏。可能我缺少一些内容。这是模板。因此,在“设置”页面上,您可以使用设置页面中的值填充inn类别和子类别。这将使用设置页面中的值填充不同的页面。我想隐藏空行,因此我在a列中创建了一个条件单元格,用于检查Different值并返回“show”或“hide”。我还希望以后可以添加更多类别,因此脚本应该能够基于该值显示和隐藏。如果有意义,请不要在循环中使用活动工作表。请改用工作表[I]。我不会使用固定数量的行,而是使用工作表[I]。getLasrRow()到目前为止,我没有收到好的反馈,而是修复了上面的代码以反映您所说的内容。我怀疑我的问题可能与以下行有关:`var range=activeSheet.getRange(rowsToCheck,columnsToCheck);var rangeValue=range.getValue();`谢谢你的回答!这解决了我的主要问题。我现在唯一缺少的是if(rangeValue==“SHOW”)中的代码。它们有一个.hideRow(range),但没有一个等效的.showRow(range)。有没有想过我如何解决这个问题?我想出来了,非常感谢!)