如何按标签名称中的年月倒序排序Google Sheets工作表标签
按年月倒序排列Google Sheets工作表的Apps Script解决方案
你原来的代码默认按字母表顺序排序,会出现April排在January前的问题,无法匹配月份的时间顺序。以下是修改后可直接使用的代码:
function sortSheetsByDateDesc() { const ss = SpreadsheetApp.getActiveSpreadsheet(); const allSheets = ss.getSheets(); // 存储符合「月份 年份」格式的工作表信息:[表名, 时间戳, 原工作表对象] const validSheets = []; // 如果你有固定不需要排序的表(比如汇总表、说明表),把表名写到下面的数组里,这些表会固定排在最前面 const excludeSheetNames = ["汇总", "说明"]; const excludeSheets = []; allSheets.forEach(sheet => { const sheetName = sheet.getName(); // 先排除不需要参与排序的表 if (excludeSheetNames.includes(sheetName)) { excludeSheets.push(sheet); return; } // 尝试将表名转换为日期 const date = new Date(sheetName); // 检查是否是合法日期 if (!isNaN(date.getTime())) { validSheets.push({ name: sheetName, timestamp: date.getTime(), sheet: sheet }); } else { // 不符合日期格式的表也放到排除列表里,你可以根据需要调整逻辑 excludeSheets.push(sheet); } }); // 按时间戳倒序排序:年份大的在前,同一年份月份大的在前 validSheets.sort((a, b) => b.timestamp - a.timestamp); // 整理最终的排序顺序:先放排除的表,再放按时间排序的表 const sortedSheets = [...excludeSheets, ...validSheets.map(item => item.sheet)]; // 执行重排 sortedSheets.forEach((sheet, index) => { ss.setActiveSheet(sheet); ss.moveActiveSheet(index + 1); }); }
使用说明
- 打开你需要处理的Google Sheets文件,点击顶部菜单栏「扩展程序」>「Apps Script」进入脚本编辑器
- 清空原有代码,粘贴上面的代码
- 如果有不需要参与排序的固定工作表,修改
excludeSheetNames数组里的内容,填入对应的表名即可 - 点击保存按钮,给项目随便起个名字,然后点击运行按钮,第一次运行需要按照提示完成授权,授权完成后脚本就会自动完成工作表排序
- 之后每个月新增工作表后,重新进入脚本编辑器运行一次即可
内容的提问来源于stack exchange,提问作者LindseyR
相关产品推荐
相关产品推荐

