繁体   English   中英

Google 表格 - Google Apps 脚本 - ElseIf 语句

[英]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);
}

谢谢

您的(不完整的)代码似乎存在一些问题,这可能是罪魁祸首:

  1. You probably want to use r.getColumn() and r.getRow() in place of r.columnStart and r.rowStart as discussed in n the comments.
  2. || if 语句中的运算符是 OR 运算符,我不相信你想要。 您可能希望使用&& (AND) 运算符,因为这意味着 if 语句的主体仅在起始行/列正确且单元格值正确时才会执行。
  3. 似乎您可能想对r.getColumn()使用==运算符而不是!= ,因为您只想检查单元格的值,前提是它是状态列(B 列,也就是第 2 列)。
  4. 您的 if 语句似乎实际上并没有做任何事情,因为它以分号结尾。 在 JavaScript(和 Google Apps 脚本)中,分号结束语句,因此您的 if 语句将立即终止,而没有机会执行任何逻辑。 我们可以通过将其他语句移动到一组花括号中来解决这个问题:
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);
  }
}
  1. 我们可以在这里使用几个 if-else 语句来为每个可能的状态值实现逻辑,但这需要大量不必要的代码重复。 switch-case 似乎是解决此问题的更好方法:
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.

 
粤ICP备18138465号  © 2020-2025 STACKOOM.COM