微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

Google Sheets Script:根据下拉菜单移动行并按日期自动排序

如何解决Google Sheets Script:根据下拉菜单移动行并按日期自动排序

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

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

    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,5).moveto(dest.getRange(dest.getLastRow()+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,5).moveTo(dest.getRange(dest.getLastRow()+1,5));
  src.deleteRow(r.rowStart);
  dest.getDataRange().offset(1,0).sort({column: 4,ascending: true});
}

示例:

enter image description here

enter image description here

输出:

enter image description here

enter image description here

参考:

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。