Search code examples
google-apps-scriptgoogle-sheetsnamed-ranges

Is there an easier way to implement the missing "getNamedRange(....)" method?


In Google Apps Script there is a method getNamedRanges() on Spreadsheets and Sheets which returns a LIST of Named Ranges. But there is no getNamedRange("Name") which returns a SINGLE named range.

This seems odd to me.

To get round this, I'm using this convoluted process:

function testing()
{
  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var nameOfNamedRange = "NameOfMyNamedRange";

  var namedRanges = ss.getNamedRanges();

  /* ###### THIS IS WHAT I HAVE TO DO ######### */
  for (i = 0; i<namedRanges.length; ++i)
  { var nRange = namedRanges[i];
    if ( nRange.getName() == nameOfNamedRange )
      {
        /* Process nRange
        doSomething(nRange);
        */
        Logger.log(nRange.getName());
      }
  }

/* ############ THIS IS WHAT I'D LIKE TO DO (or something similar) ##########
    var nRange = ss.getNamedRange("NameOfMyNamedRange") // ...Range   not ...Ranges

*/
}

Is there an easier way to do this? I can't help thinking I'm missing something obvious.


Solution

  • For example, how about using the method of getRangeByName()?

    Modified script:

    var ss = SpreadsheetApp.getActiveSpreadsheet();
    var nameOfNamedRange = "NameOfMyNamedRange";
    var nRange = ss.getRangeByName(nameOfNamedRange); // Added
    

    Reference:

    Edit:

    When you want to retrieve a single named range, how about the following sample script, because there are no methods for directly retrieve the single one? The name of named range is only one in the Spreadsheet. This can be used. Please think of this as just one of several answers.

    var ss = SpreadsheetApp.getActiveSpreadsheet();
    var nameOfNamedRange = "NameOfMyNamedRange";
    var nRange = ss.getNamedRanges().filter(function(e) {return e.getName() === nameOfNamedRange})[0]; // Added