根据单元格值插入或删除时间戳

Posted

技术标签:

【中文标题】根据单元格值插入或删除时间戳【英文标题】:Insert or delete a timestamp based on cell value 【发布时间】:2022-01-21 15:31:07 【问题描述】:

使用此脚本,我可以根据 col E 中的“SI”在 col G 中自动创建时间戳。 现在我会这样: 1 - 当我删除 col E 中的现有值“SI”时,必须删除时间戳 2 - 因此,如果我在 col 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 的回答,我已经用这个编辑了脚本,但问题是当在 col G 中选择“URGENTE”时,col 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');
    
  
 

【问题讨论】:

【参考方案1】:

我相信你的目标如下。

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')

【讨论】:

我已经更新了问题,请看顶部。 @Gavis 感谢您的回复。关于您更新的问题,我又添加了一个示例脚本。你能确认一下吗?如果我误解了您更新的问题并且没有用,我深表歉意。 完美!效果很好 @Gavis 感谢您的回复和测试。很高兴您的问题得到解决。

以上是关于根据单元格值插入或删除时间戳的主要内容,如果未能解决你的问题,请参考以下文章

将系统时间戳插入配置单元表中的时间戳字段

从 Dataframe 获取单个单元格值的更快方法(仅使用转换)

根据时间戳差异删除行 - 火花

Google电子表格脚本,用于根据单元格值插入新行

H2 时间戳 - 始终插入(或获取)当前日期

比较两个时间戳的值,并根据 concat 函数中的预定义结构将它们插入结果中