隐藏包含工作表名称的列表中的工作表?

时间:2015-09-15 19:41:14

标签: google-apps-script google-sheets

我需要从包含相应名称表的列表中隐藏工作表。 我将有一个Filter函数,每次打开文件时我都希望更新隐藏表。

我有这个,但这是固定值或固定名称..我需要写30个变量......

#include <iostream>

int main()
{
    char mystring[] = "string";
    std::cout << mystring << " has " << sizeof(mystring) << 'characters.\n';
    for (int index = 0; index < sizeof(mystring); ++index)
        std::cout << static_cast<int>(mystring[index]) << " ";

    return 0;
}

如何编写隐藏A1范围内的工作表的函数:A20 ??

2 个答案:

答案 0 :(得分:0)

正如您所提到的,最好抓住整个范围,然后从那里进行迭代,而不是为每张工作表创建一个新变量。

如果你有列'A'中的工作表名称列表和'B'列中的标志值(我知道你在C中有它,我只需更改它以使其更容易),你可以迭代每一行,获取工作表的名称和标志值,然后调用函数getSheetByName,然后根据标志值hideSheet或showSheet。

     function hide()
    {
      var ss = SpreadsheetApp.getActiveSpreadsheet();
      var row =ss.getLastRow();
      var col =ss.getLastColumn();
      var range = ss.getSheetByName('INICIO').getRange(1,1,row,col).getValues();

      for(var i =1; i<range.length; i++)
      {
        var name = range[i][0]; // get the value in column A
        var flag = range[i][1]; // get the value in column B

        var sheet = ss.getSheetByName(name); //It would be better to validate if the function returned a value 
//so the code won't stop if it cannot find the sheet.
        if(flag == 0)
        {
          sheet.hideSheet();
        }
        else
        {
          sheet.showSheet();
        }
      }
    }

确保表格的名称正确,以便功能可以找到它们。希望这会有所帮助。

答案 1 :(得分:0)

您可以将数据作为范围获取,并根据这些值隐藏所需的工作表。 要在电子表格的开头隐藏工作表,请使用hideSheets()中的onOpen()

如果你没有固定数据范围A1:A10中的标志所指定的那么多张,那么这也会检查条件。

function onOpen(){
  var ui = SpreadsheetApp.getUi();
  ui.createMenu('Hide Sheets')
  .addItem('Hide Sheets', 'hideSheets')
  .addItem('Show All Sheets', 'showAllSheets')
  .addToUi();
}

function hideSheets() {
  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var configSheet = ss.getSheets()[0];
  var sheetValues = configSheet.getRange('A1:A10').getValues();
  Logger.log(sheetValues);
  for(var i=0;i<sheetValues.length;i++){
    if(ss.getSheets()[i]!=undefined){
      if(sheetValues[i]==0){
        ss.getSheets()[i].hideSheet();
      }else{
        ss.getSheets()[i].showSheet();
      }
    }
  }
}

function showAllSheets() {
  var ss = SpreadsheetApp.getActiveSpreadsheet();
  for(var i=0;i<ss.getSheets().length;i++)
    ss.getSheets()[i].showSheet();
}
带有上述功能的

Demo电子表格。