【问题标题】:How to make multiple paths to an IF statement Google Apps Script/Javascript如何为 IF 语句创建多个路径 Google Apps 脚本/Javascript
【发布时间】:2021-07-20 10:36:01
【问题描述】:

所以我试图为几个不同的事情运行一个 onEdit 命令,因为不可能同时运行 2 个,所以我将它们组合成一个 if 语句。这是通过我正在编码的谷歌表格。

复选框在“Waitlist”中,发送的数据是“归档”。

复选框被选中 存在多条路径;

[1] 如果框在第 3 行到 ~17 中被选中(它只需要 10atm) 将行复制到另一个名为存档的工作表,删除该行然后创建一个新的空白行。

[2] 如果从第 31 行开始选中该框,则复制然后将数据移动到同一存档,然后删除行。

我的代码:

function onEdit(e) {

  const src = e.source.getActiveSheet();
  const r = e.range;

    if (src.getName() != "Waitlist" || r.columnStart != 11 || r.rowStart !==4 && r.rowStart !==5 && r.rowStart !==6 && r.rowStart !==7 && r.rowStart !==8 && r.rowStart !==9 && r.rowStart !==10 ) 
    return; 
// does it meet criteria [1]? 
      var ss = SpreadsheetApp.getActiveSpreadsheet();
      var sheet = ss.getActiveSheet();
      var range = ss.getRange("Waitlist!B18:L18");
      var row = range.getRowIndex();
      sheet.insertRowsAfter(17, 1);
      range.copyTo(sheet.getRange(row + 1, 1, 1, column), {contentsOnly:false});
// create copy of row with drop downs.
      
      const dest2 = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Archives");
      src.getRange(r.rowStart,3,1,10).moveTo(dest2.getRange(dest2.getLastRow()+1,1,1,10));
      src.deleteRow(r.rowStart)
// move then delete row.

      
    if (src.getName() != "Waitlist" || r.columnStart != 11 || r.rowStart != 31 && r.rowStart !=32 && r.rowStart !=33 && r.rowStart !=34) 
    return;
// does it meet criteria [2]?
      const dest1 = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Archives");
      src.getRange(r.rowStart,3,1,10).moveTo(dest1.getRange(dest1.getLastRow()+1,1,1,10));
      src.deleteRow(r.rowStart)
//move then delete row.
}

问题是,当我执行它时,它只会执行两条路径之一。 我不确定我在这里缺少什么......

【问题讨论】:

  • 这很多||和 && - 你确定那些 OR 和 AND 的布尔逻辑是正确的 - 布尔逻辑可能很棘手
  • it will only do one of the two paths.走哪条路径,相关值是什么?
  • 你可以在同一个onEdit函数中进行多种不同的操作。

标签: javascript google-apps-script google-sheets


【解决方案1】:

好的!我让它工作了,找到了触发器部分,并将它们分成 3 个单独的函数。

现在它适用于我需要的所有 3 个不同部分。

它现在创建一个包含所需变量的新行,同时移动已检查的行。

感谢所有回复的人!

// Standard Grinding Archive
function onEdit1(e) {
  const src = e.source.getActiveSheet();
  const x = e.range;
  if (src.getName() != "Grinding Waitlist" || x.columnStart != 13 || x.rowStart !=5 && x.rowStart != 6 && x.rowStart != 7 && x.rowStart != 8) return;
  const dest1 = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Grinding Archives");
  src.getRange(x.rowStart,4,1,9).moveTo(dest1.getRange(dest1.getLastRow()+1,2,1,8));
  src.deleteRow(x.rowStart);


  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var sheet = ss.getActiveSheet();
  var range = ss.getRange("Grinding Waitlist!B20:M20");
  var row = range.getRowIndex();

 sheet.insertRowsAfter(19, 1);
 range.copyTo(sheet.getRange(row + 1, 1, 1, column), {contentsOnly:false});
  
}
// Fest Grinding Archive
function onEdit3(e) {
  const src = e.source.getActiveSheet();
  const x = e.range;
  if (src.getName() != "Grinding Waitlist" || x.columnStart != 13 || x.rowStart !=27 && x.rowStart != 28 && x.rowStart != 29 && x.rowStart != 30) return;
  const dest1 = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Grinding Archives");
  src.getRange(x.rowStart,4,1,9).moveTo(dest1.getRange(dest1.getLastRow()+1,2,1,8));
  src.deleteRow(x.rowStart);
} 

// Leveling Archive 
function onEdit2(e) {
  const src = e.source.getActiveSheet();
  const r = e.range;
  if(src.getName() != "Leveling Waitlist" ||  r.rowStart == 1 || r.columnStart != 12 ) return;
  const dest2 = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Leveling Archives");
  src.getRange(r.rowStart,4,1,8).moveTo(dest2.getRange(dest2.getLastRow()+1,2,1,6));
  src.deleteRow(r.rowStart); 

  // code for making a new row. 
  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var sheet = ss.getActiveSheet();
  var range = ss.getRange("Leveling Waitlist!B20:M20");
  var row = range.getRowIndex();

  sheet.insertRowsAfter(19, 1);
  range.copyTo(sheet.getRange(row + 1, 1, 1, column), {contentsOnly:false});
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-07-03
    • 1970-01-01
    • 1970-01-01
    • 2023-03-12
    • 1970-01-01
    • 2021-06-10
    相关资源
    最近更新 更多