0

When I edit a cell ("active cell"), the actual date set in another one ("celltoedit"). But when I delete the original one, "celltoedit" doesn't.

It's my first script, so I need help for dummies, please.

I have problems with the last part. With this code when I edit a cell, actual date appear in another one, but after this, both are automatically deleted.

The code is this:

//Some functions to get the Letter or 'vice versa'
function columnToLetter(column) {
  var temp, letter = '';
  while (column > 0) {
    temp = (column - 1) % 26;
    letter = String.fromCharCode(temp + 65) + letter;
    column = (column - temp - 1) / 26;
  }
  return letter;
}

function letterToColumn(letter) {
  var column = 0,
    length = letter.length;
  for (var i = 0; i < length; i++) {
    column += (letter.charCodeAt(i) - 64) * Math.pow(26, length - i - 1);
  }
  return column;
}
//Source: https://stackoverflow.com/a/21231012/8586908

// When a cell is modified on the spreadsheet this function gets called.

function onEdit(e) {
  //We get the spreadsheet object
  var sheet = e.range.getSheet();

  //Save currently activeCell
  var activeCell = SpreadsheetApp.getActiveRange();
  var column = activeCell.getColumn();
  var row = activeCell.getRow();

  //If the cell is empty probably the user has just deleted it so we don't have to put the date
  if (activeCell.getValue() !== "") {

    //We get the cell we want to edit
    var cellToEdit = sheet.getRange(columnToLetter(column + 33) + (row)).getCell(1, 1)

    //If the cell is empty
    if (cellToEdit.getValue() == "") {
      //We edit the cell to save the actual date, just if cell is in interested sheet and range.
      if (e.range.getSheet().getName() != '1ºESO') return; //we put here this to limit its operation to a single sheet using Name's sheet.
      if (e.range.columnStart >= 9 && e.range.columnStart <= 14 && e.range.rowStart >= 9 & e.range.rowStart <= 2653) { //Define interested range here: I9:N2653
        cellToEdit.setValue(new Date());

        //If the cell is deleted
        if (activeCell.getValue() == "") {

          //and the edition is in range
          if (e.range.getSheet().getName() != '1ºESO') return; //we put here this to limit its operation to a single sheet using Name's sheet.
          if (e.range.columnStart >= 9 && e.range.columnStart <= 14 && e.range.rowStart >= 9 & e.range.rowStart <= 2653) { //Define interested range here: I9:N2653

            //we delete cell with date
            cellToEdit.setValue("");
          }
        }
      }
    }
  }
}

1 Answers1

0

Ok! Solved. I had to do 2 differents scripts. One for set data on edit, and another one for delete when original cell is deleted.