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

如何通过事件名称从Google表格更新Google日历的活动时间

解决Google表格日历赛事更新问题:避免重复创建,实现时间同步

针对你的需求,修改后的脚本会先根据赛事名称在目标日历中查找已有事件,找到则更新起止时间,未找到再创建新事件,同时跳过空行避免无效操作:

function gameImport() {
  var spreadsheet = SpreadsheetApp.getActiveSheet();
  var calendarId = spreadsheet.getRange("b3").getValue();
  var cal = CalendarApp.getCalendarById(calendarId);
  var calendarName = cal.getName();

  Browser.msgBox("操作日历 = " + calendarName); 

  // 获取赛事数据
  var games = spreadsheet.getRange("A5:D100").getValues();
  var updatedCount = 0;
  var createdCount = 0;

  // 设置事件查找的时间范围(可根据赛季调整,示例为前后3个月,提升查找效率)
  var searchStart = new Date();
  searchStart.setMonth(searchStart.getMonth() - 3);
  var searchEnd = new Date();
  searchEnd.setMonth(searchEnd.getMonth() + 3);

  for (var x = 0; x < games.length; x++) {
    var details = games[x];
    
    var startTime = new Date(details[1]);
    var endTime = new Date(details[2]);
    var title = details[3];

    // 跳过空行(无赛事名称或无效时间的行)
    if (!title || isNaN(startTime.getTime()) || isNaN(endTime.getTime())) {
      continue;
    }

    // 根据赛事名称和时间范围查找已有事件
    var existingEvents = cal.getEvents(searchStart, searchEnd, {search: title});

    if (existingEvents.length > 0) {
      // 找到对应事件,更新起止时间(假设名称唯一,取第一个匹配项)
      var event = existingEvents[0];
      event.setStartTime(startTime);
      event.setEndTime(endTime);
      updatedCount++;
    } else {
      // 无对应事件,创建新事件
      cal.createEvent(title, startTime, endTime);
      createdCount++;
    }
  }

  // 提示最终操作结果
  Browser.msgBox("操作完成:更新赛事 " + updatedCount + " 个,创建新赛事 " + createdCount + " 个");
}

关键逻辑说明:

  1. 空行过滤:添加判断跳过没有赛事名称或无效时间的行,避免脚本报错或创建无效事件。
  2. 事件查找优化:设置合理的时间范围(示例为前后3个月),减少需要遍历的日历事件数量,提升脚本运行效率;如果你的赛季时间固定,可以直接替换为赛季的起止日期。
  3. 更新/创建分支:
    • 通过getEvents结合赛事名称搜索,找到已有事件则调用setStartTime和setEndTime更新时间
    • 未找到匹配事件时,才执行createEvent创建新事件
  4. 结果统计:统计更新和创建的赛事数量,最后统一提示操作结果,避免原脚本中循环弹窗的干扰。

额外建议:

  • 确保赛事名称唯一且固定:如果赛事名称有变动(比如添加轮次),会导致无法匹配到已有事件,建议保持名称格式一致(如你当前的“球队A vs 球队B”格式)
  • 可扩展添加事件描述/地点:如果表格中有赛事地点等信息,可以在创建/更新时通过setDescription或setLocation补充到日历事件中

内容的提问来源于stack exchange,提问作者HabitualExplorer

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.04 08:01:02