Hi I want to show Onlt The first date entered, so whenever someone change it the timestamp WONT change what can i use for it? like filter? my code is like this if C&E&F is filled then timestamp the timestamp should be freezed once someone input it, when someone change it the timestamp WONT CHANGET
function onEdit(e) {
const editedRange = e.range
const sheet = editedRange.getSheet()
var row = editedRange.getRow();
if (
sheet.getName() === 'Data' && ///cari sheet yang dipakai
(editedRange.getColumn() == 4 || editedRange.getColumn() == 5 || editedRange.getColumn() == 6) && ///jika keisi
(sheet.getRange(row, 4).getValue() !== "" && sheet.getRange(row, 5).getValue() !== "" && sheet.getRange(row, 6).getValue() !=="") ///jika tidak diisi
)
{
const timestampRange = sheet.getRange(editedRange.getRow(), 1, editedRange.getNumRows(), 1)
timestampRange.setValue(Utilities.formatDate(new Date(), Session.getScriptTimeZone(), "d/MM/yyyy HH:mm:ss")); /// memunculkan timestamp pada colum ke1/A yg dituju
}
}
CodePudding user response:
This version requires that all three of d,e and f must be filled in order to get a time stamp and once you get a timestamp then it does not change unless the user changes it manually
function onEdit(e) {
//e.source.toast("Entry1");
const sh = e.range.getSheet()
if (sh.getName() == 'Sheet0' && e.range.columnStart > 3 && e.range.columnStart < 7 && e.value) {
let x = sh.getRange(e.range.rowStart,4,1,3).getValues()[0].every(e => e );//This requires d,e and f to be filled or truthy
//e.source.toast("outer gate " x);
if (sh.getRange(e.range.rowStart, 1).getValue() == '' && x) {
//e.source.toast("inner gate")
sh.getRange(e.range.rowStart, 1).setValue(Utilities.formatDate(new Date(), Session.getScriptTimeZone(), "d/MM/yyy HH:mm:ss"))
}
}//if column is null the set the timestamp otherwise do nothing
}
Demo: