繁体   English   中英

Google表格脚本编写,如何防止Googel表格中的时间戳自动更新或取消显示?

[英]Google sheets script writing, how do I prevent an auto update or recacluation of my timestamps in googel sheets?

我附上了我在google中运行的电子表格的副本。 这个概念是当某人开始接订单时,例如他们将在I3中键入其姓名,然后他们的时间就会开始。 完成后,他们将在J3中键入自己的名字,每个名字都会导致以下时间戳,从而导致总持续时间。 稍后它将考虑百分比。

问题在于时间戳似乎是在不提示的情况下随机更新的。 它似乎是在打印或重新打开时。 这将导致时间和百分比不正确。 任何帮助将不胜感激

看来我应该写一个脚本来满足这种需要,但是我对如何做到这一点一无所知。 谷歌文档帮助论坛中的回复将我定向到了该论坛。

在此处输入链接说明

我认为您无法选择要更新或重新计算的单元格(如果我错了,请告诉我)。

未优化的解决方法(也许某些专家获得了更好的解决方案):

function onEdit(e){

  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var sheet = ss.getActiveSheet();
  var i = 3;

  while(i <= sheet.getLastRow())
  {    
    var data = sheet.getRange(i, 9, 3, 2).getValues();

    if(data[1][0].length == 0)
    {
      if(data[0][0] != "")
      {
        var d = new Date();
        sheet.getRange(i+1, 9).setValue(d);
      }
    }
    if(data[1][1].length == 0)
    {
      if(data[0][1] != "")
      {
        var d = new Date()
        sheet.getRange(i+1, 10).setValue(d);
      }
    }
    i=i+3;
  }
}

onEdit(e)函数是Google Spreadsheet中的一个简单触发器实现。 每次编辑单元格时都会触发。

在上面的这段代码中,我们反复检查每个元素是否添加了名称。 如果是这样,代码会将日期和时间设置为刚添加的名称下方。 由于您将值设置为一瞬间,因此任何自动更新都不会修改这些时间。

对于这种解决方法,您需要删除放在要添加时间戳的单元格上的公式(即I4和J4)。 您可以保留计算时间差的单元格,它们应该可以正常工作。

在脚本编辑器中的脚本下方粘贴并保存。

function onEdit(e) {
if (e.range.rowStart % 3 != 0 || [9, 10].indexOf(e.range.columnStart) == -1) return;
var o = e.range.offset(1, 0);
if (!o.getValue()) o.setValue(new Date())
}

不要通过在脚本编辑器中单击“播放”按钮来运行脚本。 而是返回到任何选项卡,清除现在具有= now()公式的所有单元格并输入名称。 查看是否显示时间戳。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2025 STACKOOM.COM