复制并粘贴到 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,我不知道你想实现的如下。

  1. 当“D”列和“E”列的值不为空或为空时,即使其他行的条件已填充,也不想复制。
  2. 当“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) 复制的行。