Function GoogleSheets脚本:基于下拉菜单移动行并按日期自动排序

Function GoogleSheets脚本:基于下拉菜单移动行并按日期自动排序,function,sorting,google-apps-script,google-sheets,scripting,Function,Sorting,Google Apps Script,Google Sheets,Scripting,我正在GoogleSheets()中创建一个团队任务跟踪器,其中包含任务名称、通过下拉菜单显示的任务状态(新建、进行中、完成等)、截止日期和任务注释。有一个包含所有新任务的选项卡,一个用于进行中任务、已完成任务等的选项卡。当下拉状态被选择为“新建”以外的任何状态时,我希望任务数据的行从新选项卡移动到相应的选项卡,并且我希望任务数据的每个选项卡按到期日期排序。我能够独立完成这两件事,但我无法让他们一起工作 根据所选状态(下拉项:新建、进行中、完成等),将数据行移动到工作表中的相应选项卡。为此,我使

我正在GoogleSheets()中创建一个团队任务跟踪器,其中包含任务名称、通过下拉菜单显示的任务状态(新建、进行中、完成等)、截止日期和任务注释。有一个包含所有新任务的选项卡,一个用于进行中任务、已完成任务等的选项卡。当下拉状态被选择为“新建”以外的任何状态时,我希望任务数据的行从新选项卡移动到相应的选项卡,并且我希望任务数据的每个选项卡按到期日期排序。我能够独立完成这两件事,但我无法让他们一起工作

  • 根据所选状态(下拉项:新建、进行中、完成等),将数据行移动到工作表中的相应选项卡。为此,我使用了以下脚本,在状态更改时将行移动到目标工作表的底线:

    function onEdit(e) {
      const src = e.source.getActiveSheet();
      const r = e.range;
      if (r.columnStart != 2 || r.rowStart == 1 || e.value == src.getName()) return;
      const dest = SpreadsheetApp.getActiveSpreadsheet().getSheetByName(e.value);
      src.getRange(r.rowStart,1,1,5).moveTo(dest.getRange(dest.getLastRow()+1,1,1,5));
      }
    
  • 按到期日期列出任务(在每个选项卡中),从顶部的“最早到期”到底部的“最晚到期”。为此,我使用了如下所示的脚本,该脚本对我有效,但我不知道如何将该脚本或类似的脚本与现有脚本结合起来,我必须根据所选的下拉项自动移动行

  • 我真的很感激任何帮助自动移动行的基础上下拉项目和自动排序的数据截止日期!非常感谢。

    移动行后,可以添加sort()方法

    试试这个:

    function onEdit(e) {
      const src = e.source.getActiveSheet();
      const r = e.range;
      if (r.columnStart != 2 || r.rowStart == 1 || e.value == src.getName()) return;
      const dest = SpreadsheetApp.getActiveSpreadsheet().getSheetByName(e.value);
      src.getRange(r.rowStart,1,1,5).moveTo(dest.getRange(dest.getLastRow()+1,1,1,5));
      src.deleteRow(r.rowStart);
      dest.getDataRange().offset(1, 0).sort({column: 4, ascending: true});
    }
    
    示例:

    输出:

    参考:


    • 如果你在这个问题中张贴了足够的信息,这样我就不用看你的电子表格了,然后我会回答这个问题。
      function onEdit(e) {
        const src = e.source.getActiveSheet();
        const r = e.range;
        if (r.columnStart != 2 || r.rowStart == 1 || e.value == src.getName()) return;
        const dest = SpreadsheetApp.getActiveSpreadsheet().getSheetByName(e.value);
        src.getRange(r.rowStart,1,1,5).moveTo(dest.getRange(dest.getLastRow()+1,1,1,5));
        src.deleteRow(r.rowStart);
        dest.getDataRange().offset(1, 0).sort({column: 4, ascending: true});
      }