【问题标题】:How to lock cell movement with row movement when sorting Google Sheets对Google表格进行排序时如何通过行移动锁定单元格移动
【发布时间】:2021-08-12 15:17:09
【问题描述】:

我有这个脚本用于自动自定义排序,但是,由于某种原因,它仅在所选范围仅包含我实际要排序的列而不是整个表时才有效。在这种情况下,我想按人们的当前状态(这是一个包含每个人的所有选项的下拉菜单)对他们进行排序 - 当他们“准备好”时,我希望他们出现在顶部,当“DISPATCHED”出现在第二位时,“ENROUTE” - 第三等。 状态列的排序很好,但它本身不会移动行。

有没有办法对一行进行分组和锁定,这样如果该行的一个单元格被重新排序,那么整行都应该重新排序?这是我目前使用的脚本:

SHEET_NAME = "Zars";
SORT_DATA_RANGE = "F3:F100";

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', 'DISPATCHED', 'ENROUTE', 'REST', 'COVERED', 'NO ANSWER', '']; //CUSTOM ORDER LIST
  values.sort(function (a, b) {
    if (a[0] === 'READY' && b[0] !== 'READY') { return -1; }
    else if (a[0] !== 'READY' && b[0] === 'READY') { return 1; }
    else { return order.indexOf(a[0]) - order.indexOf(b[0]); }
  });
  range.setValues(values);
  ss.toast('Sort complete.');
}

非常感谢所有帮助!非常感谢

【问题讨论】:

  • 我不确定我是否理解,你能分享一个样本表来显示当前的行为和你想要的行为吗?

标签: sorting google-sheets google-sheets-formula


【解决方案1】:

你修改错了。

SHEET_NAME = "Zars";
SORT_DATA_ROWSTART = 3; // Data starts from Row 3
SORT_DATA_ROWEND = 100; // Data ends by Row 100
SORT_DATA_COL = 6; // Status in Col F

function onEdit(e){
  multiSortColumns(e);
}
function multiSortColumns(e){
  const r = e.range.rowStart;
  if (r < SORT_DATA_ROWSTART) { return; }
  if (r > SORT_DATA_ROWEND) { return; }
  var sheet = e.source.getActiveSheet();
  if (sheet.getName() !== SHEET_NAME) { return; }
  var rows = SORT_DATA_ROWEND - SORT_DATA_ROWSTART + 1;
  var range = sheet.getRange(SORT_DATA_STARTROW, 1, rows, sheet.getLastColumn()); 
  var values = range.getValues(); 
  var order = ['READY', 'DISPATCHED', 'ENROUTE', 'REST', 'COVERED', 'NO ANSWER', '']; //CUSTOM ORDER LIST
  var i = SORT_DATA_COL - 1;
  values.sort(function (a, b) {
    return order.indexOf(a[i]) - order.indexOf(b[i]);
  });
  range.setValues(values);
  ss.toast('Sort complete.');
}

【讨论】:

    猜你喜欢
    • 2019-10-23
    • 1970-01-01
    • 1970-01-01
    • 2018-01-08
    • 1970-01-01
    • 1970-01-01
    • 2013-04-22
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多