google-apps-script - 在 GOOGLE SCRIPT 中复制和粘贴
问题描述
*我想检查“Sheet1”上的“D”和“E”列。*IF: => "D" 和 "E" 列的值为空而不是空 => 我想将 A:I 中的行从 Sheet1 复制到 "Sheet2" 中最后一行的下一行;*如果没有满足条件 => 什么都不做
您提供的代码很好,但是在不满足条件时出现错误。
我想使用 Google Apps 脚本来实现这一点。
解决方案
我相信你的目标如下。
- 您想检查“Sheet1”上的“D”和“E”列。
- 当“D”和“E”列的值为空且不为空时,您希望将该行的“A”列到“I”列复制到“Sheet2”中最后一行的下一行。
- 您想使用 Google Apps 脚本实现此目的。
关于If there's no condition met => DO NOTHING
,我不确定您要实现以下哪个。
- 当“D”和“E”列的值不为空或不为空时,您不想复制,即使其他行的条件已满。
- 当“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)
。
推荐阅读
- python - 为什么Python按顺序打印一组数字
- sql - SQL:排除重复项
- javascript - 如何从钩子内的 Formik 中获取值?
- python - 它是一个 python 程序,用于使用递归查找用户输入的数字的阶乘。但它会产生错误“前几行重复 995 次”
- spring-boot - gradle: Task :jar SKIPPED 当我用 gradlew build 得到我的 jar 时
- python - kivy-ios .toolchain.py:第 4 行:语法错误:Mac High Sierra 中文件意外结束
- c++ - 计算车辆之间的距离并设置速度,使距离保持不变,例如 5 米
- tkinter - 在 tkinter 中使用可滚动框架时初始化具有正确尺寸的窗口
- python - 为什么我不应该将我的 django 密钥存储在 settings.py 中
- python - 在 matplotlib 中将 x 轴从天转换为月