谷歌表格脚本需求:预订表打开及切换工作表时自动定位当日日期
壁球俱乐部预订表自动化定位方案
完全可以实现你想要的两个自动化需求!针对你的场景,我写了一段Google Apps Script代码,既能在打开表格时自动跳转到当日日期,也能在切换"COURT 1"和"COURT 2"工作表时自动定位到对应表的当日行。
实现代码
打开你的Google表格,点击顶部菜单栏的「扩展」→「Apps Script」,把下面的代码粘贴进去,保存并授权(第一次运行需要授权访问表格权限):
// 表格打开时触发,初始化两个工作表的定位,最后回到COURT 1 function onOpen() { const ss = SpreadsheetApp.getActiveSpreadsheet(); const court1 = ss.getSheetByName("COURT 1"); const court2 = ss.getSheetByName("COURT 2"); // 定位两个工作表的当日日期 navigateToToday(court1); navigateToToday(court2); // 切回COURT 1作为默认显示工作表 ss.setActiveSheet(court1); } // 切换工作表时触发定位 function onChange(e) { // 仅当切换活动工作表时执行 if (e.changeType === "ACTIVE_SHEET") { const activeSheet = SpreadsheetApp.getActiveSheet(); // 只处理COURT 1和COURT 2 if (activeSheet.getName() === "COURT 1" || activeSheet.getName() === "COURT 2") { navigateToToday(activeSheet); } } } // 封装定位逻辑:找到A列带*的单元格并定位 function navigateToToday(sheet) { const range = sheet.getRange("A:A"); const values = range.getValues(); // 遍历A列,找到包含*的行(对应你标记的当日日期行) for (let i = 0; i < values.length; i++) { if (values[i][0] && values[i][0].toString().includes("*")) { const targetCell = sheet.getRange(i + 1, 1); // 滚动到目标单元格并设置为活动单元格 sheet.setActiveRange(targetCell); SpreadsheetApp.flush(); // 确保界面更新 break; } } }
代码说明
onOpen():表格打开时自动执行,先分别定位两个场地工作表的当日行,最后切回"COURT 1",完全符合你想要的初始状态逻辑。onChange(e):监听工作表切换事件,只要切换到"COURT 1"或"COURT 2",就自动触发定位操作,不用用户手动查找。navigateToToday(sheet):核心定位逻辑,遍历A列找到带*的单元格(也就是你用公式标记的当日日期行),然后直接滚动到该位置并设置为活动单元格。
额外提示
如果后续你的标记方式有变化(比如不用*改用其他符号),只需要修改navigateToToday函数里的includes("*")部分,替换成对应的标记即可,非常灵活。
内容的提问来源于stack exchange,提问作者Mark Ains
相关产品推荐
相关产品推荐

