簡體   English   中英

onEdit() 特定單元格不會觸發腳本

[英]onEdit() specific cell doesn't fire the script

當我更改源工作表中一個單元格的值時,我試圖將數據從一張工作表復制到另一張工作表。 我在編輯特定單元格時嘗試觸發的其他腳本也遇到了這個問題,不確定我做錯了什么。

我在這里找到了這段代碼( 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();
}

但什么都沒有發生。

說明/問題:

這里有兩點需要注意:

  • 您忘記將事件 object 作為CopyRange(e) function 的參數傳遞。 如果沒有此參數,則無法使用事件 object,但您的代碼會使用它。

  • 實際上,由於SpreadsheetApp.openById() ,您需要一個可安裝的觸發器。 您確實也可以使用您提到的腳本創建觸發器,這也是我推薦的方法。

解決方案:

Go 到export電子表格,清除之前的代碼並添加此代碼。 本質上,我將事件 object 添加到CopyRange(e) function 和觸發器創建 function 中。 然后執行createOnEditTrigger function:

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();
}

例子

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM