如何修复本地时间的 Google Apps 脚本并自动清除单元格

Posted

技术标签:

【中文标题】如何修复本地时间的 Google Apps 脚本并自动清除单元格【英文标题】:How to fix Google Apps Script for local time and automatically clear a cell 【发布时间】:2019-07-02 04:58:01 【问题描述】:

我正在创建一个必须由不同人填写的共享议程。每次他们修改某个单元格时,都会在同一行的另一个单元格中报告更改日期(天)。下面的代码目前正在运行,但有 3 个小问题:

    当地时间不正确(我住在意大利) 我也想看看时间(小时:分钟) 如果修改后的单元格被清除(如文本被删除),更改日期也会消失。

我发现这种类型的代码很难调试,希望能提供任何帮助。 提前谢谢你,

function onEdit(event) 
var cell = event.source.getActiveCell();   
var sheet = cell.getSheet();
var headers= sheet.getDataRange().getValues()[0]; 
var statusCol = headers.indexOf('Status') + 1 ; 

var ss = event.source.getActiveSheet();
if (event.range.columnStart != 2) 

 else 
    ss.getRange(event.range.rowStart, 5)
        .setValue(getDate(new Date()));


var tt = event.source.getActiveSheet();
if (event.range.columnStart != 34) 
    return;
 else 
    tt.getRange(event.range.rowStart, 37)
        .setValue(getDate(new Date()));



function getDate(d) 
if (d) 
    return d.getDate() + "/" + (d.getMonth()+1) + "/" + d.getYear();


【问题讨论】:

您是否在此处缺少return; if (event.range.columnStart != 2) //here else ss.getRange(event.range.rowStart, 5) .setValue(getDate(new Date())); 这个问题太宽泛了,因为每个点都有自己的答案。 【参考方案1】:

添加时区、小时、分钟,如果单元格内容被删除,则删除日期时间。

它以 24 小时格式添加小时和分钟,并进行时区校正,如果 e.value 为空,则删除日期时间单元格的内容。

function onEdit(e) 
  var ss=e.source;
  var rg=e.range;   
  var sh=rg.getSheet();
  if(rg.columnStart!=2 && rg.columnStart!=34)return;
  if(rg.columnStart==2)
    if(e.value) 
      sh.getRange(rg.rowStart, 5).setValue(Utilities.formatDate(new Date(new Date().getFullYear(),new Date().getMonth()+1,new Date().getDate(),new Date().getHours(),new Date().getMinutes()),Session.getScriptTimeZone(),"d/MMM/yyyy HH:mm"));
    else
      sh.getRange(rg.rowStart, 5).setValue('');
    
  
  if (rg.columnStart==34) 
    if(e.value) 
      sh.getRange(rg.rowStart, 37).setValue(Utilities.formatDate(new Date(new Date().getFullYear(),new Date().getMonth()+1,new Date().getDate(),new Date().getHours(),new Date().getMinutes()),Session.getScriptTimeZone(),"d/MMM/yyyy HH:mm"));
    else
      sh.getRange(rg.rowStart, 37).setValue('');
    
  

Spreadsheet Edit Event Object Utilities.formatDate()

【讨论】:

感谢您的及时回复。不幸的是,时间比我的实际时区早了 6 个小时。此外,一旦删除单元格的内容,包含日期的单元格也不会被删除。我不知道这是否有区别,但第 3 列和第 34 列是下拉列表 是的,很高兴知道它们是下拉菜单,因为我的床单上没有任何下拉菜单。这对我有用,所以你可能需要做一些调试,因为你没有包括所有细节和你的问题 电子表格有一个时区,脚本有一个时区,因此您可能需要调整它们。 我很抱歉缺少详细信息。我不太了解代码。您能否帮助我解决如何修复代码以考虑下拉菜单?非常感谢!! 使用新信息和代码更新您的问题,并创建电子表格的公开版本,以便我们验证操作。看看minimal reproducible example 和How to Ask。或者,如果您希望您可以检查这个关闭并启动另一个。您的来电。

以上是关于如何修复本地时间的 Google Apps 脚本并自动清除单元格的主要内容,如果未能解决你的问题,请参考以下文章