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

关于通过Google Sheets联动Google Calendar创建日程并回传日程时间的技术实现可行性问询

实现Google Sheet与Google Calendar的双向交互功能

完全可以实现!这种双向交互的需求,用Google Apps Script就能轻松搞定,我给你拆解具体步骤,照着做就行:

一、先搞定Sheet的基础设置

  • 打开你的Google Sheet,先把表头建好:A列设为Name,B列设为Location,C列设为Date,D列设为Time。
  • 接下来添加两个操作按钮:点击顶部菜单栏的「插入」→「绘图」,画两个按钮(比如一个写“打开Calendar预填信息”,另一个写“同步日程时间”),然后分别右键点击绘图,选择「分配脚本」,对应后面写的函数名。

二、编写Google Apps Script代码

打开Sheet的脚本编辑器:点击顶部菜单栏的「扩展程序」→「Apps Script」,把下面的代码替换进去:

1. 打开预填好信息的Calendar页面

这个函数会读取当前选中行的Name和Location,生成一个预填了标题和地点的Calendar事件创建链接,打开给用户编辑:

function openCalendarWithPrefill() {
  const sheet = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();
  const activeRow = sheet.getActiveCell().getRow();
  
  // 跳过表头行
  if (activeRow === 1) {
    SpreadsheetApp.getUi().alert("别选表头行哦,请选中要操作的数据行!");
    return;
  }
  
  // 获取当前行的Name和Location
  const name = sheet.getRange(activeRow, 1).getValue();
  const location = sheet.getRange(activeRow, 2).getValue();
  
  // 检查是否填了必要信息
  if (!name || !location) {
    SpreadsheetApp.getUi().alert("先把Name和Location填好再点按钮呀!");
    return;
  }
  
  // 生成预填的Calendar事件创建URL
  const calendarUrl = `https://calendar.google.com/calendar/u/0/r/eventedit?text=${encodeURIComponent(name)}&location=${encodeURIComponent(location)}`;
  
  // 弹出对话框打开Calendar页面
  SpreadsheetApp.getUi().showModalDialog(
    HtmlService.createHtmlOutput(`<script>window.open("${calendarUrl}", "_blank"); google.script.host.close();</script>`),
    "正在打开Google Calendar..."
  );
}

2. 把Calendar里设置好的时间同步回Sheet

用户在Calendar里完成日期时间设置并保存事件后,点击这个按钮就能把对应事件的时间同步回当前行:

function syncCalendarEventToSheet() {
  const sheet = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();
  const activeRow = sheet.getActiveCell().getRow();
  
  if (activeRow === 1) {
    SpreadsheetApp.getUi().alert("请选中数据行再同步!");
    return;
  }
  
  const name = sheet.getRange(activeRow, 1).getValue();
  const location = sheet.getRange(activeRow, 2).getValue();
  
  // 搜索未来7天内匹配Name和Location的事件(可以根据需要调整时间范围)
  const calendar = CalendarApp.getDefaultCalendar();
  const events = calendar.getEvents(new Date(), new Date(new Date().getTime() + 7 * 24 * 60 * 60 * 1000));
  
  // 遍历找到匹配的事件
  for (const event of events) {
    if (event.getTitle() === name && event.getLocation() === location) {
      const startTime = event.getStartTime();
      // 写入日期和时间到Sheet
      sheet.getRange(activeRow, 3).setValue(startTime.toLocaleDateString());
      sheet.getRange(activeRow, 4).setValue(startTime.toLocaleTimeString());
      SpreadsheetApp.getUi().alert("搞定!日程时间已经同步到表格啦~");
      return;
    }
  }
  
  SpreadsheetApp.getUi().alert("没找到对应的日程哦,确认一下是不是在Calendar里保存好事件啦?");
}

三、授权和测试

  • 第一次点击按钮的时候,会弹出授权提示,按照步骤授权就行(需要允许脚本访问你的Sheet和Calendar)。
  • 测试流程:先在某一行填好Name和Location,选中这一行,点击「打开Calendar预填信息」,在Calendar里设置好日期时间并保存事件,回到Sheet再点击「同步日程时间」,就能看到Date和Time列自动填上啦!

进阶优化(可选)

如果想要更自动化,不用手动点同步按钮,可以试试:

  • 给syncCalendarEventToSheet函数设置时间驱动触发器,比如每10分钟运行一次,自动搜索匹配的事件并同步。
  • 或者利用Google Calendar的推送通知API,当事件创建/更新时自动触发脚本同步,不过这个需要一点Web Apps的知识,适合有基础的用户折腾。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.29 21:49:10