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

将Google表单数据导出至Google Calendar时遇TypeError错误求助

错误原因及修复方案

核心错误原因

TypeError: cal.createEvent is not a function 是因为 CalendarApp.getCalendarsByName('Paws Appointment Sample') 返回的是日历对象数组(即使只有一个匹配日历,也会返回长度为1的数组),而数组没有 createEvent 方法,必须获取数组中的单个日历实例才能调用该方法。

具体修复步骤

1. 正确获取日历对象

将日历获取代码修改为取数组的第一个元素,并添加容错判断(避免找不到日历时报错):

var calendars = CalendarApp.getCalendarsByName('Paws Appointment Sample');
if (calendars.length === 0) {
  Logger.log('未找到指定日历');
  return;
}
var cal = calendars[0];

2. 修复结束时间计算错误

原代码中 endHours = 0+30+start.getHours() 逻辑错误(把30分钟当成小时累加),直接通过时间戳计算结束时间更简单可靠:

// 结束时间为开始时间加30分钟
var end = new Date(start.getTime() + 30 * 60 * 1000);

3. 修复未定义的函数调用

原代码中的 addGuest(email) 和 setDescription(fosterName) 是未定义的函数,应该使用创建的事件对象调用对应方法:

var event = cal.createEvent(animalName+' '+animalNumber+' Foster Walk-In Visit', start, end);
event.addGuest(email);
event.setDescription("寄养人姓名:" + fosterName);

4. 补全开始时间的时间部分

原代码中 start 只包含日期,没有时间(表单的time1-time7未被使用),需要将表单中的时间组件拼接后合并到日期中:

// 拼接表单中的时间部分(根据实际表单组件调整,示例假设time1-time5是小时、冒号、分钟、AM/PM)
var timeStr = time1 + time2 + time3 + time5;
// 合并日期和时间
var fullDateTimeStr = replace + " " + timeStr;
var start = new Date(fullDateTimeStr);

修改后的完整代码

function createEvent() {
    var form = FormApp.openById('1Y2FnxrX_Z40qkva57Bt_NjYCfhZWciig-wWxbgmGwOM');
    
    // 修复:正确获取日历对象
    var calendars = CalendarApp.getCalendarsByName('Paws Appointment Sample');
    if (calendars.length === 0) {
        Logger.log('未找到指定日历');
        return;
    }
    var cal = calendars[0];
    
    var responses = form.getResponses();
    var len = responses.length;
    var last = len - 1;
    var items = responses[last].getItemResponses();
    var email = responses[last].getRespondentEmail();
    var type = items[0].getResponse();
    var date = items[1].getResponse();
    var time1 = items[2].getResponse();
    var time2 = items[3].getResponse();
    var time3 = items[4].getResponse();
    var time4 = items[5].getResponse();
    var time5 = items[6].getResponse();
    var time6 = items[7].getResponse();
    var time7 = items[8].getResponse();
    
    // 修复:拼接时间并合并到日期
    var timeStr = time1 + time2 + time3 + time5; // 根据表单实际结构调整
    var replace = date.replace(/-/g, "/");
    var fullDateTimeStr = replace + " " + timeStr;
    var start = new Date(fullDateTimeStr);
    Logger.log('完整开始时间: ' + start);
    
    // 修复:正确计算结束时间(加30分钟)
    var end = new Date(start.getTime() + 30 * 60 * 1000);
    Logger.log('结束时间: ' + end);
    
    var animalName = items[9].getResponse();
    var animalNumber = items[10].getResponse();
    var fosterName = items[12].getResponse();
    var subject = "Foster Walk-In Visit: " + animalName;
    var url = 'https://calendar.google.com/calendar/embed?src=f16mtjblk9ttjhka4pfou8673c%40group.calendar.google.com&ctz=America%2FNew_York';
    var body = "You can view your scheduled visit here " + url;
    
    // 创建日历事件
    var event = cal.createEvent(animalName + ' ' + animalNumber + ' Foster Walk-In Visit', start, end);
    // 修复:使用事件对象添加嘉宾和描述
    event.addGuest(email);
    event.setDescription("寄养人姓名:" + fosterName);
    
    GmailApp.sendEmail(email, subject, body);
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.22 12:36:23