繁体   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