我需要从包含相应名称表的列表中隐藏工作表。 我将有一个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 ??
答案 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电子表格。