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

如何在Google表格中通过Apps Script生成短URL并应用于日历事件

如何在Google表格中通过Apps Script生成短URL并应用于日历事件

我完全懂你的需求啦——把Google幻灯片的长URL缩成短链接,再通过Google表格的Apps Script自动放到日历事件里,还不想用额外的第三方API,只用原生工具对吧?这就给你一步步讲怎么实现:

先做好前置准备

  • 提前创建好你要用来添加事件的日历
  • 打开这个日历的「设置」页面,往下滑找到「日历ID」,复制这个ID
  • 回到Google表格的主工作表,把复制的日历ID粘贴到<Calendar ID>对应的单元格里,同时把日历名称也粘贴到<Calendar Name>的单元格中

第一步:添加生成短URL的函数

先在Apps Script编辑器里加这个函数,它能帮你把长URL转成短链接,用的是Google官方的服务,不用额外API:

function shortenUrl(longUrl) {
  try {
    // 调用Google短网址服务(需要先在编辑器中启用该服务)
    var shortUrl = UrlShortener.Url.insert({longUrl: longUrl});
    return shortUrl.id;
  } catch (e) {
    // 如果生成失败,就返回原长URL,不影响后续操作
    Logger.log("短链接生成失败:" + e.toString());
    return longUrl;
  }
}

👉 启用服务的小步骤:打开Apps Script编辑器,点击左侧的「服务」图标(像拼图块),找到「UrlShortener」,点击「添加」就搞定了,这是Google自带的,不用额外申请密钥。

第二步:编写创建日历事件的主函数

这个函数会读取表格里的信息,生成短链接,然后自动创建日历事件,还能帮你清理旧事件:

/*
* 前置提示:
* 日历必须提前创建完成
* 日历ID和名称要已经填入主工作表的对应单元格
*/
function CreateManyEvents() {
  // 获取当前表格对象
  var spreadsheet = SpreadsheetApp.getActiveSpreadsheet();
  // 激活第3张工作表(索引从0开始,所以[2]对应第3张)
  var targetSheet = spreadsheet.getSheets()[2];
  SpreadsheetApp.setActiveSheet(targetSheet);
  
  // 先清理旧事件(可选,如果不需要可以注释掉这行)
  BulkDeleteEventsDelete();
  
  // 读取工作表里的所有数据
  var dataRange = targetSheet.getDataRange();
  var data = dataRange.getValues();
  
  // 从主工作表获取日历ID,记得把这里的单元格位置改成你自己的
  var mainSheet = spreadsheet.getSheetByName("主工作表");
  var calendarId = mainSheet.getRange("A1").getValue(); // 假设日历ID在A1单元格
  var calendar = CalendarApp.getCalendarById(calendarId);
  
  // 遍历每一行数据,创建事件
  for (var i = 1; i < data.length; i++) { // 跳过第1行标题行
    var eventTitle = data[i][0]; // 假设第1列是事件标题
    var eventStart = data[i][1]; // 第2列是开始时间
    var eventEnd = data[i][2]; // 第3列是结束时间
    var longSlideUrl = data[i][3]; // 第4列是Google幻灯片的长URL
    
    // 生成短链接
    var shortSlideUrl = shortenUrl(longSlideUrl);
    
    // 创建日历事件,把短链接放到描述里(也可以改成位置字段哦)
    calendar.createEvent(eventTitle, eventStart, eventEnd, {
      description: "幻灯片链接:" + shortSlideUrl
    });
  }
  
  // 弹出提示告诉我们创建完成啦
  SpreadsheetApp.getUi().alert("事件创建完成!");
}

// 批量删除旧事件的辅助函数
function BulkDeleteEventsDelete() {
  var spreadsheet = SpreadsheetApp.getActiveSpreadsheet();
  var mainSheet = spreadsheet.getSheetByName("主工作表");
  var calendarId = mainSheet.getRange("A1").getValue(); // 对应你的日历ID单元格
  var calendar = CalendarApp.getCalendarById(calendarId);
  
  // 获取未来30天的所有事件,你可以根据需要调整时间范围
  var events = calendar.getEvents(new Date(), new Date(new Date().getTime() + 30*24*60*60*1000));
  
  // 逐个删除事件
  for (var j = 0; j < events.length; j++) {
    events[j].deleteEvent();
  }
  
  Logger.log("已成功删除" + events.length + "个旧事件");
}

最后调整小细节

  • 记得根据你自己表格的列顺序,调整代码里的data[i][0]、data[i][3]这些索引值(列从左到右是0开始计数哦)
  • 如果不想删除旧事件,把BulkDeleteEventsDelete();这行代码注释掉就行(加个//在前面)

备注:内容来源于stack exchange,提问作者John

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.17 10:38:04