【问题标题】:Apps Script: How to capture oldValue of a cell after a change made by sheets api?Apps 脚本:如何在工作表 api 进行更改后捕获单元格的 oldValue?
【发布时间】:2021-08-10 04:55:08
【问题描述】:

我正在运行一个 python 脚本,它每 5 分钟通过工作表 API 更新我的谷歌工作表(名为“通知”)。 python 脚本首先清除工作表并将其调整为仅两行,然后在顶部添加新数据,工作表的大小会自动扩展。如果我的新数据比旧数据小,我这样做是为了避免出现空行。

因此,工作表每 5 分钟更新一次,但如果我的数据源中没有发生任何新值,则新值将与旧值相同。特别是,“A2”中的值将与更新前相同。如果发生了新的事情,“A2”中的值将会不同。我想跟踪它并收到一条弹出消息,通知我更新后发生了新的事情。

据我所知,我必须使用 onChange,因为 onEdit 仅在更改由人进行且无法跟踪 api 所做的更改时才有效。不过我不确定该怎么做。

使用 onEdit 我已经实现了它并且如果我手动修改“A2”的内容会弹出一个窗口,但是当 python 更新我的工作表时没有任何反应。

这是带有 onEdit 的代码:


function onEdit(e) {
  if (e.range.getA1Notation() === 'A2') {
    let oldValue = e.oldValue
    let newValue = e.newValue
    if (oldValue != newValue) {
      Browser.msgBox('The value in A2 changed from ' + oldValue + ' to ' + newValue);
    }
  }
}

所以最终目标不是每次 python 更新我的工作表时都会弹出一个弹出窗口,但只有在更新后 'A2' 的值发生变化时才会弹出。

我该怎么做?

【问题讨论】:

  • onEdit 触发器仅在用户编辑时发生

标签: google-apps-script google-sheets triggers google-sheets-api


【解决方案1】:

通过 API 进行更改时获得弹出窗口的唯一方法是使用客户端代码中的轮询函数。一种方法是使用侧边栏来保存客户端代码。

您应该将旧值存储在某处,然后与当前值进行比较。

相关

【讨论】:

    【解决方案2】:

    您可以使用onChange 触发器和"ValueInputOption"="USER_ENTERED" 在脚本编辑工作表时触发函数。但是您不能在触发的上下文中在 UI 中显示任何内容,因此不可能弹出窗口。

    【讨论】:

      猜你喜欢
      • 2022-01-28
      • 2021-08-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-02-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多