[英]Google Sheets - Google Apps Script - ElseIf Statement
我正在尝试为 Google 表格创建 function,但对比较运算符和 elseif 格式感到困惑。
function 指向我工作表中的特定单元格,并根据状态值在工作表之间移动范围:屏幕截图
我想做以下事情:
如果状态值 =“待处理” - 将范围移动到工作表ORDERS | 积极的
如果状态值 = “在手” - 将范围移动到工作表ORDERS | 完全的
如果状态值 = “待售” - 将范围移动到工作表SALES | 积极的
如果状态值 = “已售出” - 将范围移动到工作表SALES | 完全的
function onEdit(e) {
const src = e.source.getActiveSheet();
const r = e.range;
if (r.columnStart != 2 || r.rowStart == 1 || e.value == ("In Hand"));
const dest = e.source.getSheetByName('ORDERS | Complete');
src.getRange(r.rowStart,1,1,12).moveTo(dest.getRange(dest.getLastRow()+1,1,1,12));
src.deleteRow(r.rowStart);
}
谢谢
您的(不完整的)代码似乎存在一些问题,这可能是罪魁祸首:
r.getColumn()
and r.getRow()
in place of r.columnStart
and r.rowStart
as discussed in n the comments.||
if 语句中的运算符是 OR 运算符,我不相信你想要。 您可能希望使用&&
(AND) 运算符,因为这意味着 if 语句的主体仅在起始行/列正确且单元格值正确时才会执行。r.getColumn()
使用==
运算符而不是!=
,因为您只想检查单元格的值,前提是它是状态列(B 列,也就是第 2 列)。function onEdit(e) {
const src = e.source.getActiveSheet();
const r = e.range;
if (r.columnStart != 2 && r.rowStart == 1 && e.value == ("In Hand")) {
const dest = e.source.getSheetByName('ORDERS | Complete');
src.getRange(r.rowStart,1,1,12).moveTo(dest.getRange(dest.getLastRow()+1,1,1,12));
src.deleteRow(r.rowStart);
}
}
function onEdit(e) {
const src = e.source.getActiveSheet();
const r = e.range;
if (r.getColumn() == 2 && r.getRow() == 1 && r.getWidth() == 1 && r.getHeight() == 1) {
var sheetName;
switch (e.value) {
case "Pending":
sheetName = "ORDERS | Active";
break;
case "In Hand":
sheetName = "ORDERS | Complete";
break;
case "For Sale":
sheetName = "SALES | Active";
break;
case "Sold":
sheetName = "SALES | Complete";
break;
}
if (sheetName) {
const dest = e.source.getSheetByName(sheetName);
src.getRange(r.getRow(),1,1,12).moveTo(dest.getRange(dest.getLastRow()+1,1,1,12));
src.deleteRow(r.getRow());
}
}
}
上面的 switch-case 将单元格值与有效状态进行比较,如果状态有效,则设置适当的工作表名称。 然后,我们可以以任何我们想要的方式操作该表。
附带说明:我在 if 语句中添加了两个附加条件来检查范围大小是否为 1x1,因为如果范围大于单元格,则e.value
将不可用。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.