首页 > 解决方案 > 在 GOOGLE SCRIPT 中复制和粘贴

问题描述

*我想检查“Sheet1”上的“D”和“E”列。*IF: => "D" 和 "E" 列的值为空而不是空 => 我想将 A:I 中的行从 Sheet1 复制到 "Sheet2" 中最后一行的下一行;*如果没有满足条件 => 什么都不做

您提供的代码很好,但是在不满足条件时出现错误。

我想使用 Google Apps 脚本来实现这一点。

SAMPLE1_UPDATED SAMPLE2_UPDATED

标签: google-apps-scriptgoogle-sheetscopy-paste

解决方案


我相信你的目标如下。

  • 您想检查“Sheet1”上的“D”和“E”列。
  • 当“D”和“E”列的值为空且不为空时,您希望将该行的“A”列到“I”列复制到“Sheet2”中最后一行的下一行。
  • 您想使用 Google Apps 脚本实现此目的。

关于If there's no condition met => DO NOTHING,我不确定您要实现以下哪个。

  1. 当“D”和“E”列的值不为空或不为空时,您不想复制,即使其他行的条件已满。
  2. 当“D”和“E”列的值不为空或不为空时,您不想复制行。但是具有填充条件的行会被复制。

所以,在这个答案中,我提出了以下两种模式。

模式一:

在此模式中,当“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)

推荐阅读