首页 > 解决方案 > 谷歌表格移动行多个条件

问题描述

我目前有一个工作功能,当一列标记为 TRUE 时,它从一张表(活动订单)中取出一行并将其移动到另一张表(需要输入)。这是代码:

function moverow(event) {
  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var s = event.source.getActiveSheet();
  var r = event.source.getActiveRange();  
  if(s.getName() == "Active Orders" && r.getColumn() == 23 && r.getValue() == 1) 
   {
    var row = r.getRow();
    var numColumns = s.getLastColumn();
    var targetSheet = ss.getSheetByName("Needs Entered");
    var target = targetSheet.getRange(targetSheet.getLastRow() + 1, 1);
    s.getRange(row, 1, 1, numColumns).moveTo(target);
    s.deleteRow(row);
  }
}

现在,如果第 23 列标记为 TRUE,则该行将移至“需要输入”表。我希望这更聪明一点,如果第 23 列标记为 TRUE 并且第 19 列 =“已取消”,则该行将移至“已取消”工作表,否则代码继续正常将该行移至“需要输入”床单。我不确定如何更改当前的 IF 语句以检查多个条件,然后如果不满足新的 IF 语句,如何添加 else 语句以正常继续代码。

只是还没有完全解决这一切,尝试了一些我认为可行的方法,但最终却破坏了一些东西。

标签: google-apps-scriptgoogle-sheets

解决方案


尝试这个:

function moverow(e) {
  const sh=r.range.getSheet();
  if(sh.getName()=="Active Orders") {
    if(sh.getRange(e.range.rowStart,23).getValue()=='TRUE' && sh.getRange(e.range.rowStart,19)!='Canceled') {
      let tsh=e.source.getSheetByName('NeedsEntered');
      let vs=sh.getRange(e.range.rowStart,1,1,sh.getLastColumn()).getValues();
      tsh.getRange(tsh.getLastRow()+1,1,1,vs[0].length).setValues(vs);
      sh.deleteRow(e.range.rowStart);
    }
    if(sh.getRange(e.range.rowStart,23).getValue()=='TRUE' && sh.getRange(e.range.rowStart,19)=='Canceled') {
      let tsh=e.source.getSheetByName('Canceled');
      let vs=sh.getRange(e.range.rowStart,1,1,sh.getLastColumn()).getValues();
      tsh.getRange(tsh.getLastRow()+1,1,1,vs[0].length).setValues(vs);
      sh.deleteRow(e.range.rowStart);
    }
  }
}

推荐阅读