如何修复本地时间的 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 脚本并自动清除单元格的主要内容,如果未能解决你的问题,请参考以下文章

如何重新启动失败的 Google Apps 脚本触发器?

如何保护 Google 电子表格中的 Apps 脚本代码?

通常如何从 Google Apps 脚本访问 BigQuery

如何从 Google Apps 脚本授权 Google Speech-to-text?

如何在 Google Apps 脚本中使用服务帐户对 Google 表格进行身份验证

如何将 Google Apps 脚本的范围缩小到特定文件