简体   繁体   English

从工作表中删除一行并复制到另一个电子表格

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

I have managed to remove a row and place in a sheet within the same Google spreadsheet.我设法删除了一行并放置在同一个 Google 电子表格中的工作表中。 However when I modify the script to copy a row onto a different sheet, nothing happens:但是,当我修改脚本以将一行复制到不同的工作表时,没有任何反应:

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

The moveTo method can only move data within the same spreadsheet. moveTo方法只能移动同一电子表格中的数据。 It is best practice to use range.getValues() and range.setValues() to achieve the same behavior in different spreadsheets.最佳做法是使用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);
 }
}

It seems the problem here is that you're trying to access another file from your trigger (onEdit), but that is not possible because it'd require permission to change another spreadsheet: https://developers.google.com/apps-script/guides/triggers#restrictions这里的问题似乎是您试图从触发器(onEdit)访问另一个文件,但这是不可能的,因为它需要更改另一个电子表格的权限: https : //developers.google.com/apps-脚本/指南/触发器#限制

According to a related question , an installable trigger is the way to go here.根据一个相关的问题,一个可安装的触发器是这里的方法。

In this case, you need to add something like this to your code and run it to create the trigger:在这种情况下,您需要将这样的内容添加到您的代码中并运行它以创建触发器:

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

Based on this trigger, it is necessary to make a few changes to the original code you posted:基于此触发器,有必要对您发布的原始代码进行一些更改:

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.

相关问题 将一行从一个Google表格电子表格复制到表单提交中的另一表格 - Copy a row from one Google Sheet Spreadsheet to Another on Form Submit 重命名工作表一旦复制到另一个电子表格-删除“副本”? - Rename sheet once copied to another Spreadsheet - remove “Copy of”? 脚本将一些单元格复制到特定工作表上另一个电子表格的最后一行? - script to copy some cells to last row of another spreadsheet at specific sheet? 将数据从一张纸复制到另一张电子表格,但不包括特定的列 - Copy data from one sheet to another spreadsheet exclude specific columns 应用程序脚本将多个范围从一张工作表复制到另一个电子表格 - Apps script copy multiple range from 1 sheet to another spreadsheet 将行从一张工作表复制到另一张在该行中链接的工作表 - Copy Row from one Sheet to another sheet which is linked in the row 将一行从一张复制到另一张 - copy one row from one sheet to another 从1张纸中复制值并将值设置到另一张纸的最后一行 - Copy values from 1 sheet and set values to last row of another sheet 将谷歌工作表中的数据复制到另一个谷歌工作表的最后一行 - Copy data from a google sheet to the last row in another google sheet 将工作表复制到另一个电子表格[Google Apps脚本] - Copy sheet to another spreadsheet [Google Apps Script]
 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM