【问题标题】:onEdit() specific cell doesn't fire the scriptonEdit() 特定单元格不会触发脚本
【发布时间】:2020-12-09 08:46:51
【问题描述】:

当我更改源工作表中一个单元格的值时,我试图将数据从一张工作表复制到另一张工作表。我在编辑特定单元格时尝试触发的其他脚本也有这个问题,不知道我做错了什么。

我在这里 (Google Apps Script - Copy data to different worksheet and append) 找到了这段代码,当我手动运行它时它运行良好,但是当我包装它时,编辑一个单元格时似乎什么都没有发生,见下文。

  if (e.range.getA1Notation() === 'C1'){
 var sss = SpreadsheetApp.openById('1ws8yg5_1k4ZZN2amfZ-cNvY-hUMUDGhbwnNPCGJhlAY'); //replace with source ID
 var ss = sss.getSheetByName('export'); 
 var range = ss.getRange('B3:C8'); 
 var data = range.getValues();

 var tss = SpreadsheetApp.openById('152JxdVi6Ssqz2ZZ65yDW5p5m0PnP63vApNgfP3jS_Pc'); //replace with destination ID
 var ts = tss.getSheetByName('import'); //replace with destination Sheet tab name

 ts.getRange(1, 2, 6,2).setValues(data); //you will need to define the size of the copied data see getRange()

}
}

源表: https://docs.google.com/spreadsheets/d/1ws8yg5_1k4ZZN2amfZ-cNvY-hUMUDGhbwnNPCGJhlAY/edit#gid=0

目的地表: https://docs.google.com/spreadsheets/d/152JxdVi6Ssqz2ZZ65yDW5p5m0PnP63vApNgfP3jS_Pc/edit#gid=0

我也尝试创建一个新触发器,如下所示:

function createOnEditTrigger() {
  var ss = SpreadsheetApp.openById(targetSpreadsheetID);
  ScriptApp.newTrigger("CopyRange")
    .forSpreadsheet(ss)
    .onEdit()
    .create();
}

但什么都没有发生。

【问题讨论】:

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


    【解决方案1】:

    说明/问题:

    这里有两点需要注意:

    • 您忘记将事件对象作为CopyRange(e) 函数的参数传递。没有这个参数,事件对象不能被使用,但是你的代码会使用它。

    • 确实,由于SpreadsheetApp.openById(),您需要一个可安装的触发器。您确实也可以使用您提到的脚本创建触发器,这也是我推荐的方法。

    解决方案:

    转到export 电子表格,清除之前的代码并添加此代码。本质上,我将事件对象添加到CopyRange(e) 函数和触发器创建函数中。然后只执行createOnEditTrigger函数:

    function CopyRange(e) {
      if (e.range.getA1Notation() === 'C1'){
     var sss = SpreadsheetApp.openById('1ws8yg5_1k4ZZN2amfZ-cNvY-hUMUDGhbwnNPCGJhlAY'); //replace with source ID
     var ss = sss.getSheetByName('export'); 
     var range = ss.getRange('B3:C8'); 
     var data = range.getValues();
    
     var tss = SpreadsheetApp.openById('152JxdVi6Ssqz2ZZ65yDW5p5m0PnP63vApNgfP3jS_Pc'); //replace with destination ID
     var ts = tss.getSheetByName('import'); //replace with destination Sheet tab name
    
     ts.getRange(1, 2, 6,2).setValues(data); //you will need to define the size of the copied data see getRange()
    
    }
    }
    
    function createOnEditTrigger() {
      var ss = SpreadsheetApp.openById('1ws8yg5_1k4ZZN2amfZ-cNvY-hUMUDGhbwnNPCGJhlAY');
      ScriptApp.newTrigger("CopyRange")
        .forSpreadsheet(ss)
        .onEdit()
        .create();
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-01-13
      • 1970-01-01
      • 2018-12-12
      • 1970-01-01
      相关资源
      最近更新 更多