Google 表格脚本:根据下拉列表移动行并按日期自动排序

Google Sheets Script: Move row based on dropdown AND auto-sort by date

我正在 Google 工作表 (like this) 中创建团队任务跟踪器,其中包含任务名称、通过下拉列表显示的任务状态(新建、进行中、已完成等)、截止日期和任务笔记。有一个包含所有新任务的选项卡,一个用于处理中任务、已完成任务等的选项卡。我希望 行任务数据从新选项卡移 到适当的选项卡时下拉状态已选择为“新建”以外的任何状态,我希望任务数据的每个选项卡 按截止日期 排序。我已经能够单独实现这两件事,但我无法让它们一起工作。

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

    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));
      }
    
  2. 按截止日期列出任务(在每个选项卡中),从顶部最快到期的项目到底部最晚到期的项目。为此,我使用了如下所示的 this resource 并且脚本对我有用,但我无法弄清楚如何将这个脚本或类似的东西与现有脚本结合起来,我必须根据已选择下拉项。

   var ss = SpreadsheetApp.getActiveSpreadsheet();
   var sheet = ss.getSheetByName("Sheet1");             // SHEET NAME
   var range = sheet.getRange("A2:Z");                  // RANGE TO SORT
   function onEdit(e)  {
   range.sort([{column: 2, ascending: true}]);        // COLUMN NUMBER TO SORT
   }   

如果能根据下拉项自动移动行并按截止日期自动排序数据,我将不胜感激!非常感谢。

您可以在移动行后添加 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});
}

示例:

输出:

参考: