Search code examples
google-apps-scriptcheckboxoffset

onEdit() to exclude header row


I've been reading through various posts on how to exclude the header row from my onEdit(). I have read examples of offset() and I even use shift() in my other functions. This particular one is to generate a checkbox when a range in a row has value.

I have tried the following, separately:

checkboxCell.offset(1,0)

checkboxCell.shift()

These end up as failures with messages saying they are not functions.

Could someone guide me as to how this can be done?

function onEdit(e) {
  let sheet = e.source.getActiveSheet();
  const checkboxCell = sheet.getRange(e.range.rowStart, 1);
  let editedRow = sheet.getRange(e.range.rowStart, 2, 1, 3).getValues().flat();
  editedRow = editedRow.filter(x => x != '');
  if (editedRow.length == 3) {
    checkboxCell.insertCheckboxes();
  } else {
    checkboxCell.clearDataValidations();
    checkboxCell.clearContent();
  }
}

Solution

  • Solution:

    Add another conditional statement to restrict adding a checkbox if the e.range.rowStart is set to 1 (which is the first row)

    Full code:

    function onEdit(e) {
    
      let sheet = e.source.getActiveSheet();
      const checkboxCell = sheet.getRange(e.range.rowStart, 1);
      let editedRow = sheet.getRange(e.range.rowStart, 2, 1, 3).getValues().flat();
      editedRow = editedRow.filter(x => x != '');
      
      if (editedRow.length == 3 && e.range.rowStart != 1) {
        checkboxCell.insertCheckboxes();
      } else {
        checkboxCell.clearDataValidations();
        checkboxCell.clearContent();
      }
    
    }
    

    Modification:

    from (editedRow.length == 3) to (editedRow.length == 3 && e.range.rowStart != 1)

    Output:

    enter image description here