簡體   English   中英

從工作表中刪除一行並復制到另一個電子表格

[英]Remove a row from a sheet and copy to another spreadsheet

我設法刪除了一行並放置在同一個 Google 電子表格中的工作表中。 但是,當我修改腳本以將一行復制到不同的工作表時,沒有任何反應:

function onEdit(event) {
  var ss =SpreadsheetApp.getActiveSpreadsheet();
  var s = event.source.getActiveSheet();
  var r = event.source.getActiveRange();

if(s.getName() == "CONTRACT REGISTRY DOCUMENT" && r.getColumn() == 58 && r.getValue() == "X") {
 var row = r.getRow();
 var numColumns = s.getLastColumn();
 var destination = SpreadsheetApp.openById('...');
 var targetSheet = destination.getSheetByName("NOT RENEWED");
 var target = targetSheet.getRange(targetSheet.getLastRow() + 1, 1);
 s.getRange(row, 1, 1, numColumns).moveTo(target);
 s.deleteRow(row);
 }

moveTo方法只能移動同一電子表格中的數據。 最佳做法是使用range.getValues()range.setValues()在不同的電子表格中實現相同的行為。

function onEdit(event) {
  var ss =SpreadsheetApp.getActiveSpreadsheet();
  var s = event.source.getActiveSheet();
  var r = event.source.getActiveRange();

if(s.getName() == "CONTRACT REGISTRY DOCUMENT" && r.getColumn() == 58 && r.getValue() == "X") {
 var row = r.getRow();
 var numColumns = s.getLastColumn();
 var data = r.getValues();

 // please supply the destination file ID as parameter here
 var destination = SpreadsheetApp.openById('...');

 var targetSheet = destination.getSheetByName("NOT RENEWED");
 var target = targetSheet.getRange(targetSheet.getLastRow() + 1, 1);
 target.setValues(data);
 s.deleteRow(row);
 }
}

這里的問題似乎是您試圖從觸發器(onEdit)訪問另一個文件,但這是不可能的,因為它需要更改另一個電子表格的權限: https : //developers.google.com/apps-腳本/指南/觸發器#限制

根據一個相關的問題,一個可安裝的觸發器是這里的方法。

在這種情況下,您需要將這樣的內容添加到您的代碼中並運行它以創建觸發器:

function createSpreadsheetOnEditTrigger() {
  var ss = SpreadsheetApp.getActive();
  ScriptApp.newTrigger('moveRowToAnotherSheet')
  .forSpreadsheet(ss)
  .onEdit()
  .create();
}

基於此觸發器,有必要對您發布的原始代碼進行一些更改:

function moveRowToAnotherSheet() {
  var ss = SpreadsheetApp.getActiveSpreadsheet(); 
  var s = ss.getActiveSheet(); // Changed
  var r = s.getActiveRange(); // Changed
  if(s.getName() == "CONTRACT REGISTRY DOCUMENT" && r.getColumn() == 58 && r.getValue() == "X") {
    var row = r.getRow();
    var numColumns = s.getLastColumn();
    var destination = SpreadsheetApp.openById('...');
    var targetSheet = destination.getSheetByName("NOT RENEWED");
    var target = targetSheet.getRange(targetSheet.getLastRow() + 1, 1, 1, targetSheet.getLastColumn()); // Changed
    target.setValues(s.getRange(row, 1, 1, numColumns).getValues()); // Added to use setValues instead of moveTo
    s.deleteRow(row);
  }
}

暫無
暫無

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

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