I need to hide certain sheets, and then unhide them all at once. I wrote the following, but for some reason, it only unhides the last one (in this case! What am I doing wrong? Thanks!
function unhide(){
SpreadsheetApp.getActiveSpreadsheet().getSheetByName("TOMORROW").activate();
SpreadsheetApp.getActiveSpreadsheet().getSheetByName("listws").activate();
SpreadsheetApp.getActiveSpreadsheet().getSheetByName("todaylog").activate();
SpreadsheetApp.getActiveSpreadsheet().getSheetByName("tomorrowlog").activate();
SpreadsheetApp.getActiveSpreadsheet().getSheetByName("trgt").activate();
SpreadsheetApp.getActiveSpreadsheet().getSheetByName("ndws").activate();
}
CodePudding user response:
Show Selected Sheets
function showSheets() {
const ss = SpreadsheetApp.getActive();
const shts = ["TOMORROW","listws","todaylog","tomorrowlog","trgt","ndws"];
ss.getSheets().filter(sh => ~shts.indexOf(sh.getName())).forEach(sh => sh.showSheet())
}
CodePudding user response:
Apparently the problem is the use of consecutive Sheet.activate()
.
One very ugly way to make your code work is to add SpreadsheetApp.flush()
after each of the Sheet.activate()
statements.
function unhide(){
SpreadsheetApp.getActiveSpreadsheet().getSheetByName("TOMORROW").activate();
SpreadsheetApp.flush();
SpreadsheetApp.getActiveSpreadsheet().getSheetByName("listws").activate();
SpreadsheetApp.flush();
SpreadsheetApp.getActiveSpreadsheet().getSheetByName("todaylog").activate();
SpreadsheetApp.flush();
SpreadsheetApp.getActiveSpreadsheet().getSheetByName("tomorrowlog").activate();
SpreadsheetApp.flush();
SpreadsheetApp.getActiveSpreadsheet().getSheetByName("trgt").activate();
SpreadsheetApp.flush();
SpreadsheetApp.getActiveSpreadsheet().getSheetByName("ndws").activate();
}
A better way, is to rewrite the script using a better programming approach, i.e. avoid repetition by using variables, loops, etc.
function unhide2(){
const spreadsheet = SpreadsheetApp.getActiveSpreadsheet();
const names = ["TOMORROW","listws","todaylog","tomorrowlog","trgt","ndws"];
names.forEach(name => spreadsheet.getSheetByName(name).showSheet());
}