Google脚本:如何将多行移动或复制到目标工作表

时间:2016-01-04 00:05:52

标签: google-apps-script google-sheets

我正在尝试将符合条件的源行移动到目标工作表。然后删除源表中的源行。请看下面的代码。任何帮助将不胜感激。

 function moveDeleteRow() {
    var ss = SpreadsheetApp.getActiveSpreadsheet();
    var s1 = ss.getSheets()[0];
    var values = s1.getDataRange().getValues();
    var activeUser = Session.getActiveUser().getEmail();
    var userFullName = ContactsApp.getContact(activeUser).getFullName();
    Logger.log(userFullName);
    var deleted = 0;  // Counter
    var cell = s1.getActiveCell();
for (var i = 0; i < values.length; i++) {
  if (values[i][0] == userFullName && values[i][2] == 'Shipped') {
    var rowdata = values[i];
    Logger.log(rowdata);
  var targetSheet = ss.getSheets()[2];
  var targetRange = targetSheet.getRange(targetSheet.getLastRow() + 1, 1);
  s1.getRange(1, 1, 1, s1.getLastColumn()).moveTo(targetRange);
  s1.deleteRow(i + 1 - deleted);
  deleted++;
   }
  }
 SpreadsheetApp.flush();
 };

1 个答案:

答案 0 :(得分:2)

这是将范围移动到范围

的通用代码
function moveRange() {
  var ss = SpreadsheetApp.getActiveSpreadsheet();  
  var sourceSheet = ss.getSheets()[0];  
  var sourceRange = sourceSheet.getDataRange();
  var targetSheet = ss.getSheets()[1];  
  var targetRange = targetSheet.getRange(1, 1, sourceSheet.getLastRow(), sourceSheet.getLastColumn());

  sourceRange.moveTo(targetRange) ;

}

https://developers.google.com/apps-script/reference/spreadsheet/range#movetotarget

您只需要正确选择源和目标。

编辑:如果您要移动特定行并且想要删除行,那么最好将目标值推送到一个数组中(稍后使用range.setValues(array[][]))将它们全部设置,并且要删除的行的索引,然后使用另一个循环使用sheet.deleteRow(position)删除行。在使用此时,您必须记住要删除的下一行的偏移量,因为已删除的行将导致其余行向上移动。