You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

谷歌表格脚本需求:预订表打开及切换工作表时自动定位当日日期

壁球俱乐部预订表自动化定位方案

完全可以实现你想要的两个自动化需求!针对你的场景,我写了一段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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.15 03:45:22