簡體   English   中英

Google表格腳本:自動將一行刪除到另一張表格中

[英]Google Sheets Script : Automatically remove a row into another sheet

我目前正在使用Google表單來使用戶能夠提交網站更改。 這一切都做得很好。

我添加了一個具有票證狀態的額外列。 現在,我編寫了一個腳本,該腳本檢查何時將其更新為“完成”,然后將該行移至另一個名為“完成”的工作表中。

但是,這僅在我更新手動添加的行時有效。 如果我更改從表單條目創建的行上的列,它將無法工作。 有人看過這個問題嗎? 代碼如下。

function onEdit(e){

  /*
   When a user updates a status to done the ticket gets moved to another sheet
  */
  var sheetNameToWatch = "Form responses 1"; // The sheet to watch for changes
  var columnNumberToWatch = 1; // The column where the change happens on the above sheet
  var valueToWatch = "Done"; // What is the text you are looking for
  var sheetNameToMoveTheRowTo = "Done"; // The Sheet name for where the row gets moved to.

  var ss = SpreadsheetApp.getActiveSpreadsheet(); // Get the active spreadsheet
  var sheet = SpreadsheetApp.getActiveSheet(); // Get the active sheet
  var range = sheet.getActiveCell(); // Get the current cell that has just been updated

  // Check that you are on the correct sheet and column. 
  if (sheet.getName() == sheetNameToWatch && range.getColumn() == columnNumberToWatch && range.getValue() == valueToWatch) {
    var targetSheet = ss.getSheetByName(sheetNameToMoveTheRowTo); // get a reference for the target sheet
    var targetRange = targetSheet.getRange(targetSheet.getLastRow() + 1, 1); // get a reference for the target row
    sheet.getRange(range.getRow(), 1, 1, sheet.getLastColumn()).moveTo(targetRange); // copy the row from current sheet to the new sheet
    sheet.deleteRow(range.getRow()); // Delete the row from the old sheet
  }

}

是的,除非手動進行操作,否則不會觸發onEdit函數,您將需要使用onFormSubmit觸發器,該觸發器將在收到表單響應時觸發。 這是連接到表單的手動安裝的觸發器,應該能夠完成上面編寫的功能。

 var form = FormApp.openById('1234567890abcdefghijklmnopqrstuvwxyz');
 ScriptApp.newTrigger('myFunction')
     .forForm(form)
     .onFormSubmit()
     .create();

但是,為了安全起見,您可能希望通過ID或名稱(而不是通過它們是否處於活動狀態)來定義電子表格,工作表和范圍,因此我相信如果電子表格未打開,則getActiveWhatever()方法會返回null。

如前所述,使用主動並不是最好的主意。

代替:

var ss = SpreadsheetApp.getActiveSpreadsheet(); // Get the active spreadsheet 
var sheet = SpreadsheetApp.getActiveSheet(); // Get the active sheet 
var range = sheet.getActiveCell(); // Get the current cell that has just been updated 

嘗試:

var range = e.range;
var sheet = range.getSheet();
var ss = sheet.getParent();

如果嘗試此操作,則由於無法傳遞事件,因此無法從代碼編輯器中執行它。 您必須通過實際提交表單來執行它。

暫無
暫無

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

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