当前位置: 首页 > 知识库问答 >
问题:

自动排序包括自定义订单下拉列表的Google工作表

诸葛雨泽
2023-03-14

我必须根据每行下拉列表的可变值对数据进行排序。

例如,我希望轮班的所有服务员都从下拉列表中处于“就绪”状态。那些下班的人有“下班”状态等。每个人的状态从下拉列表中手动更改,但是,我需要所有“准备就绪”的服务员出现在顶部,然后是所有的“下班”服务员,然后是“休假”服务员等。每次下拉列表中的状态更改时,列表应自动重新排序。

作为一个新手,我对如何实现这一点感到非常无知...我试图根据我看到的类似案例写一个脚本,但它根本不起作用。知道为什么以及如何纠正吗?

SHEET_NAME = "Waiters";
SORT_DATA_RANGE = "A3:G15";

function customSort(array, arrayOrder, numColumn) {

    // This is the custom order list with the status options
    var order = [READY, ONSHIFT, OFFSHIFT, REST, VACATION];

    // transpose vertical 2d array into 1d array
    for (var i = 0; i < arrayOrder.length; i++) {
      order.push(arrayOrder[i][0]);    
    }

    // sort
    return array.sort(function (a, b) {
        return order.indexOf(a[numColumn-1]) - order.indexOf(b[numColumn-1]);
    });
}

function onEdit(e){
  multiSortColumns();
}
function multiSortColumns(){
  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var sheet = ss.getSheetByName(SHEET_NAME);
  var range = sheet.getRange(SORT_DATA_RANGE);
  range.sort(customSort);
  ss.toast('Sort complete.');
}
}

任何帮助都将不胜感激!谢谢!

共有1个答案

辛龙野
2023-03-14
function onEdit(e){
  multiSortColumns();
}
function multiSortColumns(){
  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var sheet = ss.getSheetByName(SHEET_NAME);
  var range = sheet.getRange(SORT_DATA_RANGE);
  var values = range.getValues();
  var order = ['READY', 'ONSHIFT', 'OFFSHIFT', 'REST', 'VACATION'];
  values.sort(function (a, b) {
    if (a[0] === '' && b[0] !== '') { return 1; }
    else if (a[0] !== '' && b[0] === '') { return -1; }
    else { return order.indexOf(a[0]) - order.indexOf(b[0]); }
  });
  range.setValues(values);
  ss.toast('Sort complete.');
}
 类似资料:
  • 我有多张表格需要排序,它们需要按不同的列排序。这是我当前正在运行的脚本: 我想添加另一个范围排序列,这样它将首先按第10列排序,然后按第17列排序。我似乎不能让它自动排序2列。任何帮助将不胜感激!

  • 我已经成功地实现了一个google可视化表,并通过添加events listener为一列添加了自定义排序过程。 背景:数据来自数据库以呈现表。我有几个表列带有“Status”列。此列应根据不显示该表的另一个数据字段进行排序。(所有数据都来自数据库,只需一次查询。它们都运行良好。)在addListener中,我根据自己的需求对从数据库中获取的数组进行排序,并通过

  • 我正在尝试设置输入新数据时Google Sheets文档的自动排序。 链接到工作表:https://docs.google.com/spreadsheets/d/1h2-Gy67sTGKdMhG9GP-intB5fVdaJheZIcLo4Nto_Wg/edit?usp=sharing 显然,这些是玩家统计数据。我试图找出一个解决方案,让列“H”按降序对玩家进行排序。这意味着得分最多的玩家将是第一名

  • 本文向大家介绍jQuery实现自定义下拉列表,包括了jQuery实现自定义下拉列表的使用技巧和注意事项,需要的朋友参考一下 html代码: css代码: js(jquery)代码: 虽然代码很简单,但是效果是不是非常酷呢

  • 我一直在寻找一种在Google工作表上编写自动排序脚本的方法,该脚本可执行以下操作: 仅适用于特定范围(A35:I911),但适用于Google主工作表中的所有工作表 我尝试了以下代码,但无法正常工作: 提前谢谢你! 以下是谷歌表格编辑版本的链接:https://docs.google.com/spreadsheets/d/1NUy6aY-lEA66UFXg4Yx4mXsTgFvj5g2Dhv4j

  • 我希望表2(标题为“托管交易”)按日期自动排序,表1(标题为“贷款查询”)按姓氏自动排序。两张表都在一张谷歌表中。我已经找到了下面的脚本,我对它进行了轻微的修改,它在第2页上的效果非常好,可以按日期自动排序; 但是,我希望第一张工作表按照第2列中的姓氏自动排序,而不是脚本所指的第7列 值得一提的是,我对脚本做了以下更改,并在下面的脚本中添加了按姓氏排序的脚本,该脚本在第1页的第2列中运行良好; 但