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

问题描述 投票:0回答:1

我有以下脚本:

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

  }
}

这是我在其中找到脚本的原始帖子:https://support.google.com/docs/forum/AAAABuH1jm0hR40qh02UWE/?hl=en&gpf=%23!topic%2Fdocs%2FhR40qh02UWE

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

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

我想要它做的是:

1)仅复制ORDERS的最后一行上的B,C和E列!2)删除IN上E和F中的值!在为该特定行运行了代码之后(不希望它删除我没有输入“ Y”的行)3)是否可以使用按钮来代替,即单击按钮时,它会一次复制所有带有“ Y”的行?

如果您想玩耍,这里是我的工作表的链接:https://docs.google.com/spreadsheets/d/1Peo5_5QmkxVyL7j5bmgtMs9BL16cvsGhhOSuRV_TsAo/edit?usp=sharing

最好的问候manc

google-apps-script copy multiple-columns rows
1个回答
0
投票

我相信您的目标如下。

  • [列“ G”为Y时,您要将列“ B”,“ C”和“ E”的值复制到工作表ORDERS的最后一行。
    • 运行脚本时,您要复制列“ G”为Y的所有行。
  • 运行脚本时,您要删除IN表中已复制行的列“ E”和“ F”的内容。
  • 您想通过单击页面上的按钮来运行脚本。

为此,这个答案如何?

修改点:

  • 在您的脚本中,
    • [通过单击页面上的按钮运行脚本时,无法使用事件对象。
    • 您的脚本复制了有效范围的一行。
    • 复制的行的“ E”和“ F”列不会被删除。

需要修改以上修改点。当以上几点反映到脚本中时,它将变为以下内容。

修改的脚本:

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

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

注意:

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

参考:

© www.soinside.com 2019 - 2024. All rights reserved.