Google Sheets排序时如何锁定整行,使单元格跟随整行同步移动?
解决方案
问题根源
当前脚本仅选取了状态列(F列)作为操作范围,排序后也仅将排序结果写回F列,因此其他列的内容不会同步移动。
修改后可实现整行同步排序的脚本
SHEET_NAME = "Zars"; // 替换为你的整张待排序表格的完整范围,不要仅选状态列 SORT_DATA_RANGE = "A3:Z100"; // 状态列在上述SORT_DATA_RANGE范围内的索引,从0开始计数 // 例:范围以A列开头时,F列索引为5;范围以B列开头时,F列索引为4 STATUS_COL_INDEX_IN_RANGE = 5; 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', '']; values.sort(function (a, b) { var statusA = a[STATUS_COL_INDEX_IN_RANGE]; var statusB = b[STATUS_COL_INDEX_IN_RANGE]; if (statusA === 'READY' && statusB !== 'READY') { return -1; } else if (statusA !== 'READY' && statusB === 'READY') { return 1; } else { return order.indexOf(statusA) - order.indexOf(statusB); } }); range.setValues(values); ss.toast('Sort complete.'); }
配置调整说明
- 请将
SORT_DATA_RANGE的值替换为你实际的整张待排序表格的范围,覆盖所有需要同步排序的列 - 请勿将表格表头行放入
SORT_DATA_RANGE,避免表头被一同排序 - 按需调整
STATUS_COL_INDEX_IN_RANGE的值,确保对应到状态列在所选范围内的正确索引 - 状态排序规则可以直接修改
order数组的顺序,无需调整其他逻辑
内容的提问来源于stack exchange,提问作者Liliya Kostadinova
相关产品推荐
相关产品推荐

