【问题标题】:Google Sheet: How to get the actual change when onChange event fires?Google Sheet:如何在 onChange 事件触发时获得实际更改?
【发布时间】:2021-06-11 03:49:42
【问题描述】:

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

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

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

我不能使用 onEdit 的原因是我正在使用一些外部脚本来 POST 到此工作表,它不会触发 on edit 事件。

【问题讨论】:

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


    【解决方案1】:

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

    此属性返回活动电子表格,然后您可以使用getActiveSheet()、getActiveRange() 等。

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

    相关

    【讨论】:

    【解决方案2】:

    假设你有这个源代码:

    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) 一样

    【讨论】:

    • 这正是我从console.log(e) 得到的,当对工作表进行更改时。但我想从事件对象中看到正在进行的更改,正在编辑的值。查看我的问题更新。
    猜你喜欢
    • 2020-01-19
    • 2016-12-14
    • 1970-01-01
    • 2013-08-22
    • 2011-10-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多