繁体   English   中英

应用程序脚本 | 如何根据列中的值归档特定行

[英]Apps Script | How to Archive Specific Rows Based On Values In Column

我正在尝试在“引用日志”表上存档特定行。 我正在寻找的标准在“H”列中。 转介日志表

如果该列中的值等于“是”、“否”或“一半”,我希望将相关行存档在“参考档案”表中。 转介档案表

我的代码

function archiveReferrals() {
  // Set up the sheet, and ranges.
  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var s = ss.getSheetByName('Referral Logs');
  var a = ss.getSheetByName('Referral Archives');
  var r = s.getRange("H2:H");

  if(r.getValue() == "Yes" || r.getValue() == "Half" || r.getValue() == "No") {
    var row = r.getRow();
    var numColumns = s.getLastColumn();
    var targetSheet = a;

    // Move the row to the archive
    var target = targetSheet.getRange(targetSheet.getLastRow() + 1, 1);
    s.getRange(row, 1, 1, numColumns).moveTo(target);

    // Delete the row
    s.deleteRow(row);
  }
}

问题:这段代码的问题是每次你想记录一些东西时都必须手动运行。 这是低效的,并且没有任何自动化。

预期结果:预期结果是每周自动将所有“是”、“一半”和“否”结果移至“推荐档案”表。 这可以是过滤器或 for 循环,任何使其更加自动化的方法都是理想的。

并且因为它是一个表单,所以“Referral Logs”表中的那些因为已经被移动而现在为空的行需要被删除。

我真的很感谢你的帮助,非常感谢!

解释:

  • 您可以使用includes()检查范围H2:H中的单元格的值是否包含在列表中: ["Yes","Half","No"]

  • 然后利用forEach()方法遍历所有H2:H单元格,找到满足步骤 1 的单元格并获取行索引,

  • 最后,根据上一步从原始文件中删除行。 为此,您只能使用reverse()方法向后删除它们,否则索引将受到已删除行的影响。

我还添加了一个try...catch以防没有要处理的数据。 即,没有一个 H 值等于["Yes","Half","No"]

解决方案:

function archiveReferrals() {

  const ss = SpreadsheetApp.getActiveSpreadsheet();
  const s = ss.getSheetByName('Referral Logs');
  const a = ss.getSheetByName('Referral Archives');
  const values = s.getRange("H2:H").getValues().flat();
  const checks = ["Yes","Half","No"];
  const rowsDelete = [];
  const valuesMove = [];
  
  values.forEach((val,index)=>{
                 
     if (checks.includes(val)){
        valuesMove.push(s.getRange(index+2,1,1,8).getValues().flat());
        rowsDelete.push(index+2);
      }});
  
  try{
     a.getRange(a.getLastRow()+1,1,valuesMove.length,valuesMove[0].length).setValues(valuesMove);
     rowsDelete.reverse().forEach(rd=>s.deleteRow(rd));
  }

  catch(e){console.log("no data to process")};          
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

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