Google apps script 如何修复onEdit()时间戳中的故障?

Google apps script 如何修复onEdit()时间戳中的故障?,google-apps-script,google-sheets,timestamp,Google Apps Script,Google Sheets,Timestamp,我有一个简单的时间戳脚本,如下所示。 由于条目是在B列中创建的,脚本将发挥神奇的作用,并在a列中放置一个时间和日期戳 我有一些小问题。 我有8名员工和我自己同时在这张表上登记。有时时间戳不起作用,留下一列空白。 我认为脚本运行缓慢,并通过缓慢注册进行测试。(每个注册表之间的间隔为1-2秒。) 但它仍然留下一些空白。 我无法共享原始文件,因为它位于封闭网络中 我在这个文件上有大约5个脚本,所有的时间戳。是否因为脚本太多而出现故障?我做错了什么 函数onEdit(){ var s=Spreadshe

我有一个简单的时间戳脚本,如下所示。 由于条目是在B列中创建的,脚本将发挥神奇的作用,并在a列中放置一个时间和日期戳

我有一些小问题。 我有8名员工和我自己同时在这张表上登记。有时时间戳不起作用,留下一列空白。 我认为脚本运行缓慢,并通过缓慢注册进行测试。(每个注册表之间的间隔为1-2秒。) 但它仍然留下一些空白。 我无法共享原始文件,因为它位于封闭网络中

我在这个文件上有大约5个脚本,所有的时间戳。是否因为脚本太多而出现故障?我做错了什么

函数onEdit(){
var s=SpreadsheetApp.getActiveSheet();
如果(s.getName()==“БүББүБББГΓэ”){//检查我们是否在正确的工作表上
var r=s.getActiveCell();
如果(r.getColumn()==2){//检查该列
var nextCell=r.偏移量(0,-1);
如果(nextCell.getValue()='')//为空?
setValue(新日期());
}
}
}
理论解释 调用
onEdit()
简单触发器以响应电子表格编辑事件,并与特定的用户界面实例关联。因为它也是一个绑定脚本,所以它可以通过
Sheet.getActiveCell()
等方法从关联的UI访问信息。在您共享的原始脚本中,该方法用于确定已编辑的单元格,但该方法会报告光标当前所在的位置,而不一定是刚刚编辑的单元格。在检测编辑、生成事件和调用触发器函数之间存在大量延迟的机会。如果有多个用户共享一个工作表,那么同步他们的副本也会延迟触发器函数的调用。随着延迟的可能性和潜在持续时间的增加,触发该函数的用户移动到不同单元格的可能性也会增加,从而导致
onEdit()
函数中的退出条件绕过时间戳的写入

怎么办? 您的
onEdit()
trigger函数将被调用以响应编辑事件,该事件的详细信息将作为一个事件传递给trigger函数。使用此事件对象,而不是调用SpreadsheetApp方法来访问当前光标位置;由于处理延迟,它速度更快,更不容易受到更改的影响。最重要的是,因为它包含关于实际编辑事件的信息,所以它不依赖于用户在同一时间所做的事情

在这里,我重新组织了触发器函数,以使用事件对象并提高效率,因为它首先测试“便宜”的条件,将“昂贵”的服务调用留到以后

函数onEdit(事件){
var r=事件范围;
如果(r.getColumn()==2){//检查该列
var s=r.getSheet();
如果(s.getName()==“БүББүБББГΓэ”){//检查我们是否在正确的工作表上
var nextCell=r.偏移量(0,-1);
如果(nextCell.getValue()='')//为空?
setValue(新日期());
}
}
}

丢失时间戳时的工作条件是什么?(一个用户,多个用户?)?(所有者/编辑器/读者)其他脚本也解决了这个问题。解释得很透彻。非常感谢。