复制并粘贴到 GOOGLE SCRIPT
Copy and Paste in GOOGLE SCRIPT
*我想检查“Sheet1”上的“D”和“E”列。
*IF: => "D" 和 "E" 列的值为空而不是空 => 我想将 A:I 中的行从 Sheet1 复制到 "Sheet2" 中最后一行的下一行;
*如果没有满足条件=>什么都不做
您提供的代码很好,但在不满足条件时出现错误。
我想使用 Google Apps 脚本实现此目的。
SAMPLE1_UPDATED
SAMPLE2_UPDATED
我相信你的目标如下。
- 您想检查“Sheet1”上的“D”和“E”列。
- 当“D”列和“E”列的值为空且不为空时,您想将该行的“A”至“I”列复制到“Sheet2”中最后一行的下一行.
- 您想使用 Google Apps 脚本实现此目的。
关于If there's no condition met => DO NOTHING
,我不知道你想实现的如下。
- 当“D”列和“E”列的值不为空或为空时,即使其他行的条件已填充,也不想复制。
- 当“D”和“E”列的值不为空或为空时,您不想复制这些行。但是具有填充条件的行被复制了。
所以,在这个回答中,我提出了以下两种模式。
模式 1:
在此模式中,当“D”和“E”列的值不为空或为空时,即使其他行的条件已填充,脚本也不会运行。
function myFunction() {
const ss = SpreadsheetApp.getActiveSpreadsheet();
const sheet1 = ss.getSheetByName("Sheet1");
const sheet2 = ss.getSheetByName("Sheet2");
const obj = sheet1.getRange("A1:I" + sheet1.getLastRow()).getValues().reduce((o, r) => {
o[(r[3].toString() == "" && r[4].toString() != "") ? "trueCondition" : "falseCondition"].push(r);
return o;
}, {falseCondition: [], trueCondition: []});
if (obj.falseCondition.length == 0) {
sheet2.getRange(sheet2.getLastRow() + 1, 1, obj.trueCondition.length, obj.trueCondition[0].length).setValues(obj.trueCondition);
}
}
模式二:
在此模式中,当“D”和“E”列的值不为空或为空时,不会复制行。但是具有填充条件的行被复制了。
function myFunction() {
const ss = SpreadsheetApp.getActiveSpreadsheet();
const sheet1 = ss.getSheetByName("Sheet1");
const sheet2 = ss.getSheetByName("Sheet2");
const obj = sheet1.getRange("A1:I" + sheet1.getLastRow()).getValues().reduce((o, r) => {
o[(r[3].toString() == "" && r[4].toString() != "") ? "trueCondition" : "falseCondition"].push(r);
return o;
}, {falseCondition: [], trueCondition: []});
sheet2.getRange(sheet2.getLastRow() + 1, 1, obj.trueCondition.length, obj.trueCondition[0].length).setValues(obj.trueCondition);
}
注:
- 在此示例脚本中,从第一行检索“Sheet1”的值。当您要更改起始行时,请根据您的实际情况修改
"A1:I"
。
参考文献:
已添加:
关于您额外的后续 2 张示例图片,
下面的示例脚本怎么样?
示例脚本:
function myFunction() {
const ss = SpreadsheetApp.getActiveSpreadsheet();
const sheet1 = ss.getSheetByName("Sheet1");
const sheet2 = ss.getSheetByName("Sheet2");
const obj = sheet1.getRange("A1:I" + sheet1.getLastRow()).getValues().reduce((o, r) => {
if ((r[3].toString() != "" && r[4].toString() != "") || (r[3].toString() == "" && r[4].toString() == "") || (r[3].toString() != "" && r[4].toString() == "")) {
o.falseCondition.push(r);
} else if ((r[3].toString() == "" && r[4].toString() != "")) {
o.trueCondition.push(r);
}
return o;
}, {falseCondition: [], trueCondition: []});
if (obj.trueCondition.length > 0) {
sheet2.getRange(sheet2.getLastRow() + 1, 1, obj.trueCondition.length, obj.trueCondition[0].length).setValues(obj.trueCondition);
}
}
- 在这种情况下,您可以看到未被
console.log(obj.falseCondition)
复制的行。
*我想检查“Sheet1”上的“D”和“E”列。 *IF: => "D" 和 "E" 列的值为空而不是空 => 我想将 A:I 中的行从 Sheet1 复制到 "Sheet2" 中最后一行的下一行; *如果没有满足条件=>什么都不做
您提供的代码很好,但在不满足条件时出现错误。
我想使用 Google Apps 脚本实现此目的。
SAMPLE1_UPDATED SAMPLE2_UPDATED
我相信你的目标如下。
- 您想检查“Sheet1”上的“D”和“E”列。
- 当“D”列和“E”列的值为空且不为空时,您想将该行的“A”至“I”列复制到“Sheet2”中最后一行的下一行.
- 您想使用 Google Apps 脚本实现此目的。
关于If there's no condition met => DO NOTHING
,我不知道你想实现的如下。
- 当“D”列和“E”列的值不为空或为空时,即使其他行的条件已填充,也不想复制。
- 当“D”和“E”列的值不为空或为空时,您不想复制这些行。但是具有填充条件的行被复制了。
所以,在这个回答中,我提出了以下两种模式。
模式 1:
在此模式中,当“D”和“E”列的值不为空或为空时,即使其他行的条件已填充,脚本也不会运行。
function myFunction() {
const ss = SpreadsheetApp.getActiveSpreadsheet();
const sheet1 = ss.getSheetByName("Sheet1");
const sheet2 = ss.getSheetByName("Sheet2");
const obj = sheet1.getRange("A1:I" + sheet1.getLastRow()).getValues().reduce((o, r) => {
o[(r[3].toString() == "" && r[4].toString() != "") ? "trueCondition" : "falseCondition"].push(r);
return o;
}, {falseCondition: [], trueCondition: []});
if (obj.falseCondition.length == 0) {
sheet2.getRange(sheet2.getLastRow() + 1, 1, obj.trueCondition.length, obj.trueCondition[0].length).setValues(obj.trueCondition);
}
}
模式二:
在此模式中,当“D”和“E”列的值不为空或为空时,不会复制行。但是具有填充条件的行被复制了。
function myFunction() {
const ss = SpreadsheetApp.getActiveSpreadsheet();
const sheet1 = ss.getSheetByName("Sheet1");
const sheet2 = ss.getSheetByName("Sheet2");
const obj = sheet1.getRange("A1:I" + sheet1.getLastRow()).getValues().reduce((o, r) => {
o[(r[3].toString() == "" && r[4].toString() != "") ? "trueCondition" : "falseCondition"].push(r);
return o;
}, {falseCondition: [], trueCondition: []});
sheet2.getRange(sheet2.getLastRow() + 1, 1, obj.trueCondition.length, obj.trueCondition[0].length).setValues(obj.trueCondition);
}
注:
- 在此示例脚本中,从第一行检索“Sheet1”的值。当您要更改起始行时,请根据您的实际情况修改
"A1:I"
。
参考文献:
已添加:
关于您额外的后续 2 张示例图片,
下面的示例脚本怎么样?
示例脚本:
function myFunction() {
const ss = SpreadsheetApp.getActiveSpreadsheet();
const sheet1 = ss.getSheetByName("Sheet1");
const sheet2 = ss.getSheetByName("Sheet2");
const obj = sheet1.getRange("A1:I" + sheet1.getLastRow()).getValues().reduce((o, r) => {
if ((r[3].toString() != "" && r[4].toString() != "") || (r[3].toString() == "" && r[4].toString() == "") || (r[3].toString() != "" && r[4].toString() == "")) {
o.falseCondition.push(r);
} else if ((r[3].toString() == "" && r[4].toString() != "")) {
o.trueCondition.push(r);
}
return o;
}, {falseCondition: [], trueCondition: []});
if (obj.trueCondition.length > 0) {
sheet2.getRange(sheet2.getLastRow() + 1, 1, obj.trueCondition.length, obj.trueCondition[0].length).setValues(obj.trueCondition);
}
}
- 在这种情况下,您可以看到未被
console.log(obj.falseCondition)
复制的行。