将每个新值复制并粘贴到两个不同工作表上的下一个空行 - 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)) {
它将两个条件表达式合并为一个,并在其中至少一个为真时复制数据。
希望对您有所帮助。
我有一个 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)) {
它将两个条件表达式合并为一个,并在其中至少一个为真时复制数据。
希望对您有所帮助。