首页 > 解决方案 > Google Sheets 脚本帮助请求:将选中的行从多个工作表复制到新工作表

问题描述

全面披露:我的编程经验为零,但我学得很快。

我试图能够从许多不同的工作表中复制单独的行以复制到一个特定的工作表中。我花了一些时间查看这个(很棒的)网站上以前的问题/答案,并且我能够拼凑出一个似乎可以完成我正在寻找的部分内容的脚本。

我可以看到我可以/应该更改脚本中的哪个位置以获得我正在寻找的功能——但我不知道在代码中放入什么来实际做我希望做的事情。我来到这个社区谦虚地寻求帮助/指导。

这是我拼凑的脚本和我一直在使用的示例的链接

function onEdit(event) {
 // assumes source data in sheet named ABC
 // target sheet of copy to named Interdisciplinary
 // getColumn with check-boxes is currently set to colu 15 or O
 var ss = SpreadsheetApp.getActiveSpreadsheet();
 var s = event.source.getActiveSheet();
 var r = event.source.getActiveRange();

 if(s.getName() == "ABC" && r.getColumn() == 15 && r.getValue() == true) {
   var row = r.getRow();
   var numColumns = s.getLastColumn();
   var targetSheet = ss.getSheetByName("Interdisciplinary");
   var target = targetSheet.getRange(targetSheet.getLastRow() + 1, 1);
   s.getRange(row, 1, 1, numColumns).copyTo(target);
  } else if(s.getName() == "Interdisciplinary" && r.getColumn() == 4 && r.getValue() == false) {
 }
}

我知道我正在确定要从(ABC)中提取数据的特定工作表,我可以放在那里从任何已单击复选框的工作表中提取什么?

我也知道我正在将行复制到远离 LastRow 的某个已定义位置的行。我可以在那里放什么来将该行复制到我的学期标题中的一行或将复制到新工作表的顶部?

最后,我非常感谢社区可能对我的请求提出的任何其他评论、反馈和指导。

非常感谢!KD

标签: google-apps-scriptgoogle-sheets

解决方案


您的代码有效。问题是您的电子表格中的代码正在查看第 21 列,而不是第 15 列。

Also, I suggest that you review the properties available to you in the event object. You should use them instead of the first three declarations you wrote. You can see the change in my version below.

function onEdit(event) {
  var sheets =  ["ABC", "DEF", "GHI", "JKL", "MNO"]; // Sheet names that will trigger execution. Case-sensitive.

  // target sheet of copy to named Interdisciplinary
  // getColumn with check-boxes is currently set to colu 15 or O
  var ss = event.source;
  var s = event.range.getSheet();
  var r = event.range;

  if (sheets.indexOf(s.getName()) != -1 && r.getColumn() == 15 && r.getValue() == true) {
    var row = r.getRow();
    var numColumns = s.getLastColumn();
    var targetSheet = ss.getSheetByName("Interdisciplinary");
    var target = targetSheet.getRange(targetSheet.getLastRow() + 1, 1);
    s.getRange(row, 1, 1, numColumns).copyTo(target);
  } else if(s.getName() == "Interdisciplinary" && r.getColumn() == 4 && r.getValue() == false) {

  }
}

EDIT: I've modified the code to show you how to allow triggering from multiple sheets.


推荐阅读