根据单元格值插入或删除时间戳
Insert or delete a timestamp based on cell value
使用此脚本,我可以根据 E 列中的“SI”在 G 列中自动创建时间戳。
现在我会:
1 - 当我删除列 E 中的现有值“SI”时,必须删除时间戳
2 - 因此,如果我在 E 列中输入与“SI”不同的值,则必须删除时间戳
我该如何继续?
function onEdit(e){
var s = SpreadsheetApp.getActiveSheet();
if( s.getName() == "STAMPA2" )
if(e.range.columnStart == 5 && e.value === 'SI'){
e.range.offset(0,2).setValue(new Date());
}
}
更新:
根据 Cooper 和 Tanaike 的回答,我用这个编辑了脚本,但问题是当 G 列中的 select“URGENTE”时,E 列中的值变为“URGENTE”,但如果我用“SI”更改 col G 中的值,日期格式仅为 dd/mm/yyyy 而不是 dd/mm/yyyy - HH:MM(我需要)。
如何解决?
function onEdit(e) {
var s = e.range.getSheet();
if (s.getName() == "STAMPA2" && e.range.columnStart == 5) {
if (e.value == 'SI') {
e.range.offset(0, 3).setValue(new Date());
} else {
e.range.offset(0, 3).setValue('');
}
if (e.value == 'URGENTE') {
e.range.offset(0, 3).setValue('URGENTE');
}
}
}
我相信你的目标如下。
- 当
SI
的值被放入“E”列时,您想将当前日期放入“G”列。
- 当
SI
的值没有放入“E”列时,您想删除“G”列的值。
这样的话,下面的修改怎么样?
修改后的脚本:
function onEdit(e) {
var { range, value } = e;
var s = range.getSheet();
if (s.getName() == "STAMPA2" && range.columnStart == 5) {
range.offset(0, 2).setValue(value === 'SI' ? new Date() : "");
}
}
或
function onEdit(e) {
var { range } = e;
var s = range.getSheet();
if (s.getName() == "STAMPA2" && range.columnStart == 5) {
range.offset(0, 2).setValue(range.getValue() === 'SI' ? new Date() : "");
}
}
已添加:
对于您更新的问题,以下示例脚本如何?
function onEdit(e) {
var { range, value } = e;
var s = range.getSheet();
if (s.getName() == "STAMPA2" && range.columnStart == 5) {
var r = range.offset(0, 2);
if (value == 'SI') {
r.setValue(new Date()).setNumberFormat('dd"/"MM"/"yyyy" "HH":"mm');
} else if (value == 'URGENTE') {
r.setValue('URGENTE');
} else {
r.clearContent();
}
}
}
- 在此示例中,日期对象被设置为
dd"/"MM"/"yyyy" "HH":"mm
的日期格式。
- 如果想把日期写成字符串,也可以用
r.setValue(Utilities.formatDate(new Date(), Session.getScriptTimeZone(), "dd/MM/yyyy HH:mm"))
代替r.setValue(new Date()).setNumberFormat('dd"/"MM"/"yyyy" "HH":"mm')
。
使用此脚本,我可以根据 E 列中的“SI”在 G 列中自动创建时间戳。
现在我会:
1 - 当我删除列 E 中的现有值“SI”时,必须删除时间戳
2 - 因此,如果我在 E 列中输入与“SI”不同的值,则必须删除时间戳
我该如何继续?
function onEdit(e){
var s = SpreadsheetApp.getActiveSheet();
if( s.getName() == "STAMPA2" )
if(e.range.columnStart == 5 && e.value === 'SI'){
e.range.offset(0,2).setValue(new Date());
}
}
更新:
根据 Cooper 和 Tanaike 的回答,我用这个编辑了脚本,但问题是当 G 列中的 select“URGENTE”时,E 列中的值变为“URGENTE”,但如果我用“SI”更改 col G 中的值,日期格式仅为 dd/mm/yyyy 而不是 dd/mm/yyyy - HH:MM(我需要)。
如何解决?
function onEdit(e) {
var s = e.range.getSheet();
if (s.getName() == "STAMPA2" && e.range.columnStart == 5) {
if (e.value == 'SI') {
e.range.offset(0, 3).setValue(new Date());
} else {
e.range.offset(0, 3).setValue('');
}
if (e.value == 'URGENTE') {
e.range.offset(0, 3).setValue('URGENTE');
}
}
}
我相信你的目标如下。
- 当
SI
的值被放入“E”列时,您想将当前日期放入“G”列。 - 当
SI
的值没有放入“E”列时,您想删除“G”列的值。
这样的话,下面的修改怎么样?
修改后的脚本:
function onEdit(e) {
var { range, value } = e;
var s = range.getSheet();
if (s.getName() == "STAMPA2" && range.columnStart == 5) {
range.offset(0, 2).setValue(value === 'SI' ? new Date() : "");
}
}
或
function onEdit(e) {
var { range } = e;
var s = range.getSheet();
if (s.getName() == "STAMPA2" && range.columnStart == 5) {
range.offset(0, 2).setValue(range.getValue() === 'SI' ? new Date() : "");
}
}
已添加:
对于您更新的问题,以下示例脚本如何?
function onEdit(e) {
var { range, value } = e;
var s = range.getSheet();
if (s.getName() == "STAMPA2" && range.columnStart == 5) {
var r = range.offset(0, 2);
if (value == 'SI') {
r.setValue(new Date()).setNumberFormat('dd"/"MM"/"yyyy" "HH":"mm');
} else if (value == 'URGENTE') {
r.setValue('URGENTE');
} else {
r.clearContent();
}
}
}
- 在此示例中,日期对象被设置为
dd"/"MM"/"yyyy" "HH":"mm
的日期格式。 - 如果想把日期写成字符串,也可以用
r.setValue(Utilities.formatDate(new Date(), Session.getScriptTimeZone(), "dd/MM/yyyy HH:mm"))
代替r.setValue(new Date()).setNumberFormat('dd"/"MM"/"yyyy" "HH":"mm')
。