Google apps script 将多行复制并粘贴到另一张图纸上的下一个空行中

Google apps script 将多行复制并粘贴到另一张图纸上的下一个空行中,google-apps-script,copy,multiple-columns,rows,Google Apps Script,Copy,Multiple Columns,Rows,我有以下脚本: function onEdit(event) { // assumes source data in sheet named Needed // target sheet of move to named Acquired // test column with yes/no is col 5 or E var ss = SpreadsheetApp.getActiveSpreadsheet(); var s = event.source.getActiveS

我有以下脚本:

function onEdit(event) {
  // assumes source data in sheet named Needed
  // target sheet of move to named Acquired
  // test column with yes/no is col 5 or E
  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var s = event.source.getActiveSheet();
  var r = event.source.getActiveRange();
  if(s.getName() == "IN" && r.getColumn() == 7 && r.getValue() == "Y") {
    var row = r.getRow();
    var numColumns = s.getLastColumn();
    var targetSheet = ss.getSheetByName("ORDERS");
    var target = targetSheet.getRange(targetSheet.getLastRow() + 1, 1);
    s.getRange(row, 1, 1, numColumns).copyTo(target);

  }
}
这是我找到脚本的原始帖子:

我想对代码做一些小的调整,但不知道从哪里开始

目前,当在G列中输入“Y”时,它复制整行,并将行内容放在ORDERS!的最后一行

我想让它做的是:

1) 仅复制订单最后一行上的B、C和E列! 2) 在中删除E和F中的值!在为该特定行运行代码之后(不希望它删除我没有对其添加“Y”的行) 3) 是否有一种方法可以替代按钮,即当单击按钮时,它会一次复制所有带有“Y”的行

如果您想玩游戏,这里有一个指向我的工作表的链接:

致意
曼奇我相信你的目标如下

  • 当列“G”为
    Y
    时,您希望将列“B”、“C”和“E”的值复制到图纸的最后一行
    顺序
    • 您希望在运行脚本时复制列“G”为
      Y
      的所有行
  • 运行脚本时,您希望删除中的
    工作表中复制行的“E”列和“F”列的内容
  • 您希望通过单击工作表上的按钮来运行脚本
对于这个问题,这个答案如何

修改点:
  • 在你的剧本里,
    • 通过单击工作表上的按钮运行脚本时,无法使用事件对象
    • 脚本复制活动范围的一行
    • 复制行的列“E”和“F”不会被删除
需要对上述修改点进行修改。当上述各点反映到脚本中时,它将变成如下所示

修改脚本: 请将以下脚本复制并粘贴到脚本编辑器中。请准备一个正在绘制和/或图像的按钮,并将功能
run
分配给该按钮。这样,当单击按钮时,脚本将运行。并且将列“G”为
Y
的所有行的列“B”、“C”和“E”从工作表“IN”复制到工作表“ORDERS”的最后一行

注:
  • 关于运行GoogleApps脚本的按钮,我认为这个站点很有用。在您的情况下,请在工作表“In”上创建一个按钮,并将功能
    run
    分配给该按钮。这样,当单击按钮时,脚本工作
  • 请将此脚本与V8一起使用
参考资料:

太棒了@Tanaike!没想到你会这么麻烦,但非常感谢。一个问题:“if(g==“Y”){”-这行代码如何更改,以便输入任何值而不是“Y”?@manc stu感谢您的回答。我很高兴您的问题得到了解决。关于您的附加问题,当您想在if语句中为
任何值运行脚本时,如何修改为
if(g!=”){
function run() {
  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var srcSheet = ss.getSheetByName("IN");
  var dstSheet = ss.getSheetByName("ORDERS");

  // 1. Retrieve the values from "A2:G" of sheet "IN".
  var srcValues = srcSheet.getRange("A2:G" + srcSheet.getLastRow()).getValues();

  // 2. Create an object for putting values and deleting the contents of the columns "E" and "F".
  var obj = srcValues.reduce((o, [,b,c,,e,,g], i) => {
    if (g == "Y") {
      o.values.push([b, c, e]);
      o.ranges.push(`E${i + 2}:F${i + 2}`);
    }
    return o;
  }, {values: [], ranges: []});

  // 3. Copy the values to the sheet "ORDERS".
  dstSheet.getRange(dstSheet.getLastRow() + 1, 1, obj.values.length, obj.values[0].length).setValues(obj.values);

  // 4. Delete the contents of the columns "E" and "F" of sheet "IN".
  srcSheet.getRangeList(obj.ranges).clearContent();
}