Diese Funktion schreibt in eine bestimmte Spalte bei der ersten und jeder weiteren Änderung ein Erstellungs- und Änderungsdatum der Zelle. Dadurch, dass die Funktion „onEdit“ heißt, wird sie bei einer Änderung automatisch aufgerufen und es bedarf keiner weiteren Verknüpfung.
Die Variablen am Anfang der Funktion bestimmen, auf welche Blätter die Funktion beschränkt ist und welche Spalten und Zeilen von den Änderungen ausgenommen sind.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 |
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; } function onEdit() { // Column for 'update date' var update_date_col = "U"; // Column for 'creation date' var create_date_col = "V"; // Date format (EN/DE) //var date_format = "YYYY-MM-dd HH:mm:ss"; var date_format = "dd.MM.YYYY HH:mm:ss"; // Time zone //var timezone = "GMT+01:00"; var timezone = "CET+02:00"; // These rows do not trigger an update var ignore_row = [1]; // These columns do not trigger an update var ignore_col = []; // Sheets var sheets = ["Liste der CMS"]; // Set environment variables var s = SpreadsheetApp.getActiveSheet(); var r = s.getActiveCell(); var row = r.getRow(); var col = r.getColumn(); ignore_col.push(update_date_col); ignore_col.push(create_date_col); // Only trigger specific sheets sheet_ok = 0; for (var i=0; i < sheets.length ; i++ ) { if(s.getName() == sheets[i]) sheet_ok = 1; } if(sheet_ok === 0) return false; // Do not update 'create date' oder 'update date' itself if( r.getColumn() == letterToColumn(update_date_col) ) return false; if( r.getColumn() == letterToColumn(create_date_col) ) return false; // Do not update ignored rows for (var i=0; i < ignore_row.length ; i++ ) { if(r.getRow() == ignore_row[i]) return false; } // Do not update ignored cols for (var i=0; i < ignore_col.length ; i++ ) { if(r.getColumn() == letterToColumn(ignore_col[i])) return false; } // Write 'update date' var time = new Date(); time = Utilities.formatDate(time, timezone, date_format); var update_date_cell = SpreadsheetApp.getActiveSheet().getRange(update_date_col + row.toString()); update_date_cell.setValue(time); // Write 'creation date' var creation_date_cell = SpreadsheetApp.getActiveSheet().getRange(create_date_col + row.toString()); if(creation_date_cell.getValue() == "") // If cell is empty, set value (no creation date existing) creation_date_cell.setValue(time); }; |
Die Spalte für Änderungs- und Erstellungsdatum kann anschließend z.B. zum Markieren neuer Einträge genutzt werden. Dies geht mittels „Bedingten Formatierungen“, z.B. =IF(AND(NOT(ISBLANK($M2));$M2>=TODAY()-7);1;0)
.