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

Copying and Paste multiple rows into next empty Row on another sheet

我有以下脚本:

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

  }
}

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

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

目前,当 "Y" 被输入到 G 列时,它会复制整行并将行内容放在 ORDERS! 的最后一行。

我想要它做的是:

1) 仅复制订单最后一行的 B、C 和 E 列! 2) 删除 IN! 上 E 和 F 中的值!在代码对该特定行具有 运行 之后(不希望它删除我没有放置 "Y" 的行) 3) 有没有一种方法可以改为使用按钮,当单击该按钮时,它会立即复制带有 "Y" 的所有行?

这里是 link 我的 sheet 如果你想玩的话: https://docs.google.com/spreadsheets/d/1Peo5_5QmkxVyL7j5bmgtMs9BL16cvsGhhOSuRV_TsAo/edit?usp=sharing

此致 曼克

我相信你的目标如下。

  • 当"G"列为Y时,您想将"B"、"C"和"E"列的值复制到最后一行的 sheet ORDERS
    • 当脚本为 运行.
    • 时,您想复制列 "G" 为 Y 的所有行
  • 您想删除 IN 的 sheet 中复制行的 "E" 和 "F" 列的内容,当脚本是 运行.
  • 您想通过单击 sheet 上的按钮来 运行 脚本。

为此,这个答案怎么样?

修改点:

  • 在你的脚本中,
    • 当脚本是 运行 通过点击 sheet 上的按钮时,无法使用事件对象。
    • 您的脚本复制活动范围的一行。
    • 复制行的 "E" 和 "F" 列未删除。

需要修改以上修改点。当以上几点反映到脚本中,就变成了下面的样子。

修改后的脚本:

请将以下脚本复制并粘贴到脚本编辑器中。请准备一个正在绘制and/or图像的按钮,并将函数run分配给该按钮。这样,当按钮被点击时,脚本是运行。并且 "G" 列 Y 的所有行的 "B"、"C" 和 "E" 列是从 sheet "IN" 到 sheet "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 在您的情况下,请在 sheet "IN" 上创建一个按钮并将函数 run 分配给该按钮。这样,当单击按钮时,脚本就会运行。
  • 请在 V8 中使用此脚本。

参考文献: