将每个新值复制并粘贴到两个不同工作表上的下一个空行 - Google 个工作表

Copying And Pasting Each New Value To The Next Empty Row On Two Different Sheets - Google Sheets

我有一个 Google Sheet,里面有多个不同的 sheet。每次我将文本添加到第一个 sheet 的单元格(假设来自 G2:I1000 的任何单元格)时,我希望其他一些单元格的值出现在第二个 [=17] 的下一个空行中=].例如,如果我在第一个 sheet 上向 I5 添加文本,然后我想自动将单元格 A5:B5 的值粘贴到第二个 sheet 上的下一个空行(也在A 和 B 列)。

据我了解,您想执行以下操作:

  • 每次编辑某个sheet中G2:I1000范围内的值时,您想复制编辑行中的前两个单元格(A,B)。
  • 您想将这两个值传递到另一个 sheet 中的第一个空行。

您可以使用 onEdit trigger 触发器来完成此操作。每次编辑它绑定的 spreadsheet 时都会运行此函数。但是为了避免值一直被复制,在将值从一个 sheet 复制到另一个之前必须满足几个条件:

  • 编辑的行索引大于 1 且小于 1001。
  • 编辑的列为 G、H 或 I。
  • 编辑的 sheet 是您要从中复制值的那个。

满足这些条件后,函数应获取值 A、B 并将它们复制到另一个 sheet 中的第一个空行。这可以使用 appendRow.

轻松实现

下面的代码完成了所有你想做的事情:

function onEdit(e) {
  var editedSheet = e.source.getActiveSheet(); // Gets sheet that was edited
  var destSheet = e.source.getSheetByName("Destination"); // Change this according to your preferences
  var range = e.range; // Gets range that was edited
  var editedRow = range.getRow();
  var editedCol = range.getColumn();
  var editedSheetName = editedSheet.getName();
  var originName = "Origin"; // Change this according to your preferences
  if (editedRow > 1 && editedRow < 1001 && editedCol > 6 && editedCol < 10 && editedSheetName == originName) {
    var firstCol = 1;
    var numCols = 2;
    var numRows = 1;
    var copyValues = editedSheet.getRange(editedRow, firstCol, numRows, numCols).getValues()[0];
    destSheet.appendRow(copyValues);
  }
}

考虑到我已按以下方式命名 sheet。请根据您的喜好更改此设置:

  • Origin 是要从中复制值的 sheet。
  • Destination 是要将值复制到的 sheet。

更新:

  • 如果你想只复制L列对应的值等于"YES"的数据,那么你应该更改这行代码:
if (editedRow > 1 && editedRow < 1001 && editedCol > 6 && editedCol < 10 && editedSheetName == originName) {

给这个:

if (editedCol == 12 && range.getValue() == "YES" && editedSheetName == originName && editedRow > 1 && editedRow < 1001) {

其中editedCol应该等于L(12)列的索引,编辑范围的值应该是"YES".

  • 如果您希望在两种情况下都复制数据(即,如果 G、H、I 列被编辑,并且 L 列被编辑为 "YES"),则应更改该行对此:
if (((editedCol == 12 && range.getValue() == "YES") || (editedCol > 6 && editedCol < 10)) && (editedSheetName == originName && editedRow > 1 && editedRow < 1001)) {

它将两个条件表达式合并为一个,并在其中至少一个为真时复制数据。

希望对您有所帮助。