Search code examples
google-apps-scriptnamed-ranges

How do I extract a google sheet named range's column number via Google Script?


I need to enter data in a Google sheet cell, which cell is in a named range. To do that using a Google Script, I need to know the named range's column number. I have written a script that gets the job done, but only because I know the named range has only one column, so I use the getLastColumn command to get the column number. I know there has to be a command to "getColumnNumber" or something like that, but from Google documentation and this site, I simply can't find it. Any help? Bound script below:

function addSong() {
    var ss = SpreadsheetApp.getActive();
    var sheet = ss.getActiveSheet();
    var lastRow = sheet.getLastRow()
    sheet.appendRow([lastRow+1]);
    SpreadsheetApp.flush();
    var range = sheet.getRange(sheet.getLastRow(), 1);
    var songTitle = Browser.inputBox('New Song', 'Enter the song title', Browser.Buttons.OK_CANCEL);
    var namedRange = sheet.getRange("Title");
    var col = namedRange.getLastColumn();
    sheet.getRange([lastRow+1], col).setValue(songTitle)
    SpreadsheetApp.setActiveRange(range);
}  

Hey Cooper: I tried your approach and it works great, except it loses some of what I was doing with my script; specifically, it does not increment the song record number. So, I added the key bit from what you did to get the named range column correctly into my code and it all works. Revised code is:

function addSong() {
    var ss = SpreadsheetApp.getActive();
    var sheet = ss.getActiveSheet();
    var lastRow = sheet.getLastRow()
    sheet.appendRow([lastRow+1]);
    SpreadsheetApp.flush();
    var range = sheet.getRange(sheet.getLastRow(), 1);
    var songTitle = Browser.inputBox('New Song', 'Enter the song title', Browser.Buttons.OK_CANCEL);
    var namedRange = sheet.getRange("Title");
    var range=sheet.getRange(sheet.getLastRow(), namedRange.getColumn())
    range.setValue(songTitle);
    SpreadsheetApp.setActiveRange(range);
    }

Solution

  • Try this:

    function addSong() {
      var ss=SpreadsheetApp.getActive();
      var sh=ss.getActiveSheet();
      var resp=SpreadsheetApp.getUi().prompt('New Song', 'Enter the sone title', SpreadsheetApp.getUi().ButtonSet.OK_CANCEL);
      var songTitle=resp.getResponseText();
      var namedRange = ss.getRangeByName('Title');
      var range=sh.getRange(sh.getLastRow()+1, namedRange.getColumn())
      range.setValue(songTitle);
      SpreadsheetApp.setActiveRange(range);
    }