Home > Mobile >  Unhiding sheets with code in Google Sheets
Unhiding sheets with code in Google Sheets

Time:08-25

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());
}
  • Related