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

Google表单转日历脚本异常:事件时间显示0.0且丢失详情

Google日历事件创建脚本故障修复方案

问题背景

Google表单可正常同步数据至Google表格,但执行createCalendarEvent脚本创建日历事件时,事件时间显示为"0.0",且缺失起止时间、事件文本等核心信息。已尝试解绑并重建表单,调试时变量数据正常,但问题仍存在,该脚本此前稳定运行多年。

原问题代码

function createCalendarEvent() {
  var sheet = SpreadsheetApp.getActiveSheet();
  var calendar = CalendarApp.getCalendarById('plazamarinamgr@gmail.com');
 
  var startRow = 2;  // First row of data to process-2 exempts header row
  var numRows = sheet.getLastRow(); // Number of rows to process
  var numColumns = sheet.getLastColumn();
 
  var dataRange = sheet.getRange(startRow, 1, numRows-1, numColumns);
  var data = dataRange.getValues();
 
  var complete = "Done";
 
  for (var i = 0; i < data.length; ++i){
    var row = data[i];
    var timestamp = row[0]; //Timestamp
    var Duration = row[1]; //Duration
    var Contact = row[2]; //Contact
    var Phone = row[3]; //Phone
    var Email = row[4]; //Email
    var Address = row[5]; //Address
    var City = row[6]; //City
    var State = row[7]; //State
    var Zip = row[8]; //Zip
    var Start = row[9]; new Date //Start
    var End = row[10]; new Date //End
    var Type = row[11]; //Type
    var Make = row[12]; //Make
    var Length = row[13]; //Length
    var Beam = row[14]; //Beam
    var Draft = row[15]; //Draft
    var Electrical = row[16]; //Electrical
    var Notes = row[17]; //Notes
    var eventID = row[18]; //event marked Done
      if (eventID != complete){
      var currentCell = sheet.getRange (startRow + i, numColumns);  calendar.createEvent(Duration +' - '+Contact +' [P]',Start, End,{description:+Phone +' | '+Email+' | '+Type-'+Type+'|'+Make +' | Length-'+Length+'|+Beam-'+Beam +'| Draft-'+Draft+'|Electrical-'+Electrical+' |Notes-'+Notes +[P]ending [+]Confirmed [X]NoAvail [0]NoShow [1]Bill NOTE:24HR CANCELLATION REQUIRED'});
      currentCell.setValue(complete); 

核心问题分析

  1. 日期变量未正确转换:var Start = row[9]; new Date 仅将Start赋值为单元格原始值,后续的new Date是无效孤立语句,未将值转为Date对象。End变量同理,导致createEvent接收的不是合法时间对象,这是时间显示为"0.0"的根本原因。
  2. 描述字符串语法错误:存在多余的+号(如+Phone)、错误的减号(Type-'+Type+'),且[P]ending等文本未用引号包裹,触发语法报错,导致事件文本无法正常生成。
  3. 代码结构不完整:for循环和if语句均未闭合,脚本执行到一半会中断,无法完成事件创建流程。

修复后的完整代码

function createCalendarEvent() {
  var sheet = SpreadsheetApp.getActiveSheet();
  var calendar = CalendarApp.getCalendarById('plazamarinamgr@gmail.com');

  var startRow = 2;  // 跳过表头,从第2行开始处理数据
  var numRows = sheet.getLastRow(); // 获取需处理的总行数
  var numColumns = sheet.getLastColumn(); // 获取表格总列数

  var dataRange = sheet.getRange(startRow, 1, numRows - 1, numColumns);
  var data = dataRange.getValues();

  var complete = "Done";

  for (var i = 0; i < data.length; ++i) {
    var row = data[i];
    var timestamp = row[0]; // 时间戳
    var Duration = row[1]; // 时长
    var Contact = row[2]; // 联系人
    var Phone = row[3]; // 联系电话
    var Email = row[4]; // 邮箱地址
    var Address = row[5]; // 地址
    var City = row[6]; // 城市
    var State = row[7]; // 州/省份
    var Zip = row[8]; // 邮编
    // 将表格中的时间值转换为Date对象
    var Start = new Date(row[9]); 
    var End = new Date(row[10]); 
    var Type = row[11]; // 类型
    var Make = row[12]; // 品牌
    var Length = row[13]; // 长度
    var Beam = row[14]; // 船宽
    var Draft = row[15]; // 吃水深度
    var Electrical = row[16]; // 电力配置
    var Notes = row[17]; // 备注信息
    var eventID = row[18]; // 事件处理状态标记

    if (eventID != complete) {
      var currentCell = sheet.getRange(startRow + i, numColumns);
      // 重构事件描述字符串,修复语法错误
      var eventDescription = `${Phone} | ${Email} | ${Type} | ${Make} 
| Length-${Length} | Beam-${Beam} | Draft-${Draft} 
| Electrical-${Electrical} | Notes-${Notes}

[P]ending [+]Confirmed [X]NoAvail [0]NoShow [1]Bill
NOTE:24HR CANCELLATION REQUIRED`;
      // 创建日历事件
      calendar.createEvent(`${Duration} - ${Contact} [P]`, Start, End, {description: eventDescription});
      // 标记当前行为已处理
      currentCell.setValue(complete);
    }
  }
}

修复要点说明

  • 时间类型转换:通过new Date(row[9])将表格中的时间值转换为Calendar API可识别的Date对象,解决时间显示异常问题。
  • 字符串拼接优化:使用模板字符串重构事件描述,修正符号错误,提升代码可读性,避免语法报错。
  • 代码结构补全:补充for循环和函数的闭合括号,确保脚本完整执行。

内容的提问来源于stack exchange,提问作者Plaza Marina Mgr

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.11 15:05:07