Search code examples
javascriptgoogle-apps-scripttypeerror

TypeError: Cannot read property 'getRow' of null Google Script


I am getting a TypeError when running this. I can't figure out why..

function iceHorsepowerInjector() {  
  let z = 0;
  let sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName('blah blah blah');
  let sheet1 = SpreadsheetApp.getActiveSpreadsheet().getSheetByName('blah blah blah')
  let sheet2 = SpreadsheetApp.getActiveSpreadsheet().getSheetByName('blah blah blah')
  for (let i = 2; i <= 1312; i++) { 
    let handle = sheet.getRange("A"+[i]).getValue(); 
    if (handle == null){
      continue;
    } else {                                                     
    var index = sheet1.createTextFinder(handle).matchEntireCell(true).findNext().getRow(); // <---- this is where I am getting the error
    }
    if (handle == null){
    continue;
    }
    index = parseInt(index);
    let horsepower = sheet1.getRange("EE"+[index]).getValue();
    if (horsepower == "NULL"){
      continue;
    }                                            
    let id = sheet.getRange("CQ"+[i]).getValue();
    if (id == "#N/A"){
      continue;
    }                                                        
      var commands = ("UPDATE fossil_fuel_vehicle_trims SET horsepower" + "=" + "'"+horsepower+ "' WHERE id =" + handle +";")
      sheet2.getRange(1+z,1).setValue(commands);   //set to last row used in sheet3
      z = z + 1
  }   
}

This is the error..

    
TypeError: Cannot read property 'getRow' of null
iceHorsepowerInjector   @ Code.gs:11

How do I fix this? I feel as if I'm close but I can't seem to figure out why this is happening.


Solution

  • The error occurs because sheet1.createTextFinder(handle).matchEntireCell(true).findNext() returned null.

    One simple fix for this error is to replace

    var index = sheet1.createTextFinder(handle).matchEntireCell(true).findNext().getRow(); // <---- this is where I am getting the error
    }
    if (handle == null){
    continue;
    }
    

    by

    var found = sheet1.createTextFinder(handle).matchEntireCell(true).findNext();
    }
    if (found == null){
    continue;
    }
    var index = found.getRow();