【问题标题】:onEdit() doesn't catch all changesonEdit() 没有捕捉到所有的变化
【发布时间】:2019-02-24 21:28:09
【问题描述】:

我有这个简单的触发脚本,它应该在下一列中添加一个时间戳。很简单,onEdit 不会捕获所有编辑。 我可以在设置中做任何事情吗?

function onEdit(e){
  if (e.value == "TRUE") {e.range.offset(0, 1).setValue(new Date())} 
}

【问题讨论】:

标签: google-apps-script google-sheets


【解决方案1】:

关于你的情况,有a thread。在这个帖子中,Rubén 这么说

这是 onEdit 的一个已知限制。

关于这个问题的直接解决方法,需要等待谷歌的更新。

在这里,我想为您的情况想一个解决方法。此解决方法的流程如下。

此解决方法假定“F1:F20”范围内有复选框。

  1. 检查编辑范围是否在“F1:F20”内。
  2. 如果编辑的范围在“F1:F20”,则检索“F1:F20”的值并检查每个值。
  3. 创建一个数组来放置结果。
  4. 将创建的数组覆盖为“F1:F20”。

这样,虽然可能并不完美,但可以人为地实现。请将此视为几种解决方法之一。

示例脚本:

function onEdit(e){
  if (e.range.columnStart == 6 && e.range.columnEnd == 6 && e.range.rowStart <= 20) {
    var ckeckboxRange = "F1:F20";
    var date = new Date();
    var range = e.source.getRange(ckeckboxRange);
    var values = range.getValues().map(function(e) {return e[0] === true ? [date] : [""]});
    range.offset(0, 1).setValues(values);
  }
}

结果:

注意:

  • 这是一个简单的示例脚本。因此,请根据您的情况进行修改。

如果这不是您想要的结果,我深表歉意。

【讨论】:

  • @Ahmed AbdelKhalek 我的回答是否向您展示了您想要的结果?你能告诉我吗?这对我学习也很有用。如果这可行,与您有相同问题的其他人也可以将您的问题作为可以解决的问题。如果您对我的回答有疑问,我深表歉意。到时候,可以问一下你现在的情况吗?我想学习解决你的问题。
  • 在文档中的什么位置或如何通过调试查看 columnStart 和 columnEnd 我在 google 文档中看到了 e.range,但我不知道如何找到 columnStart 和 End 等对象列表...你找到这个了吗?
  • @CodeCamper 感谢您的回复。关于事件对象的range中的columnStartcolumnEnd,这个线程有用吗? stackoverflow.com/a/52248888
猜你喜欢
  • 1970-01-01
  • 2018-10-10
  • 1970-01-01
  • 1970-01-01
  • 2016-07-21
  • 1970-01-01
  • 2016-01-23
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多