Google Sheet: 如何在 onChange 事件触发时获取实际变化?

Google Sheet: How to get the actual change when onChange event fires?

doc 不是很有帮助。与 onEdit 不同,onChange 事件没有包含所做更改的属性。我如何获得它?

function onChange(e){
  console.log(e);
} 

此事件对象中没有有用的信息。

我不能使用 onEdit 的原因是我正在使用一些外部脚本来 POST 这个 sheet 而它不会触发 on edit 事件。

假设您有此源代码:

const showEvent = e => {
  Logger.log(JSON.stringify(e, null, 2));
}

const setTrigger = () => {
  const sheet = SpreadsheetApp.getActive();
  ScriptApp.newTrigger('showEvent')
    .forSpreadsheet(sheet)
    .onChange()
    .create();
}

您使用 setTrigger() 设置了触发器,每次调度 change 事件时,showEvent() 将打印出如下内容:

{
  "authMode": "FULL",
  "changeType": "REMOVE_ROW",
  "source": {},
  "triggerUid": "8302470070286889650",
  "user": {
    "email": "user@gmail.com",
    "nickname": "user"
  }
}

诀窍是确保在触发函数中指定 event 参数,在我的例子中是 e,如 showEvent(e)

使用改变事件对象的source属性。

此 属性 returns 活动电子表格,然后您可以使用 getActiveSheet()getActiveRange()

function repondToChange(e){
  
  if(e.changeType === 'EDIT'){
    const spreadsheet = e.source;
    const range = spreadsheet.getActiveRange();
    console.log(range.getA1Notation());
  }

}

相关