S.O.S.试图创建一个事件在谷歌日历通过谷歌(表+脚本),但失败.我想这和时间有关
S.O.S. Trying to create an event in google calendar via google (sheets + script), but failing. I think it has to do with the time?
所以我的剧本是基于互联网上很多很棒的人的剧本。然而,他们的脚本创建了全天事件,我只想创建一个小时的事件,所以我调整了它(不成功)。
这是我的脚本
/**
* Adds a custom menu to the active spreadsheet, containing a single menu item
* for invoking the exportEvents() function.
* The onOpen() function, when defined, is automatically invoked whenever the
* spreadsheet is opened.
* For more information on using the Spreadsheet API, see
* https://developers.google.com/apps-script/service_spreadsheet
*/
function onOpen() {
var sheet = SpreadsheetApp.getActiveSpreadsheet();
var entries = [{
name : "Export Events",
functionName : "exportEvents"
}];
sheet.addMenu("Calendar Actions", entries);
};
/**
* Export events from spreadsheet to calendar
*/
function exportEvents() {
var sheet = SpreadsheetApp.getActiveSheet();
var headerRows = 2; // Number of rows of header info (to skip)
var range = sheet.getDataRange();
var data = range.getValues();
var calId = "shmoop.com_6bibh4i9sg0jp5qicbsl1n31ik@group.calendar.google.com";
var cal = CalendarApp.getCalendarById(calId);
for (i=0; i<data.length; i++) {
if (i < headerRows) continue; // Skip header row(s)
var row = data[i];
var date = new Date(row[0]); // First column
var project = row[1]+row[3]+row[4]; // Second column
var dueDate = new Date(row[6])
var tstart = new Date(dueDate.setTime(17,00,00,00));
var tstop = new Date(dueDate.setTime(18,00,00,00));
var id = row[15]; // Sixth column == eventId
try {
var event = cal.getEventSeriesById(id);
}
catch (e) {
// do nothing - we just want to avoid the exception when event doesn't exist
}
if (!event) {
//cal.createEvent(title, new Date("March 3, 2010 08:00:00"), new Date("March 3, 2010 09:00:00"), {description:desc,location:loc});
var newEvent = cal.createEvent(project, tstart, tstop).getId();
row[15] = newEvent; // Update the data array with event ID
} else {
event.setTitle(project);
// event.setTime(tstart, tstop); // cannot setTime on eventSeries.
// ... but we CAN set recurrence!
var recurrence = CalendarApp.newRecurrence().addDailyRule().times(1);
event.setRecurrence(recurrence, tstart, tstop);
}
debugger;
// Record all event IDs to spreadsheet
range.setValues(data);
}
}
我知道脚本运行,因为每次我运行exportEvents()时,google电子表格都会更新一个事件ID。但我怀疑,由于tsart, tstop变量,实际上没有事件被推送到日历中。哦,还有,这里有一个电子表格中包含相关列的行示例:
7/10/2015 10:09:00 | Marty | wyrlwynd@mail.com |新代数II |第11单元填空| 380 | 7/17/2015 |进行中| | xavier@mail.com
欢迎任何帮助
你需要修改setTime
var tstart = new Date(dueDate.setTime(17,00,00,00));
var tstop = new Date(dueDate.setTime(18,00,00,00));
到一个setHours
var tstart = new Date(dueDate.setHours(17,00,00,00))
var tstop = new Date(dueDate.setHours(18,00,00,00))
setTime的描述:
将日期设置为1970年1月1日之后/之前的指定毫秒数
的例子:
将1332403882588毫秒添加到1970年1月1日,并显示新的日期和时间:
var d = new Date();
d.setTime(1332403882588);
d的结果将是:
Thu Mar 22 2012 04:11:22 GMT-0400 (Eastern Standard Time)
setHours:
设置日期对象的小时
例子设置小时为15:
var d = new Date();
d.setHours(15);
d的结果将是:
Thu Jul 16 2015 15:53:22 GMT-0400 (Eastern Standard Time)
来源:http://www.w3schools.com/jsref/jsref_obj_date.asp
setTime()方法实际上接受毫秒作为参数。
您可以查看此页以供参考。
那么,对于这个事件,你必须这样做:
var tstart = new Date(dueDate.setTime(1437395333000));
所以事件开始日期的值将是:
Mon Jul 20 05:28:53 GMT-07:00 2015
setTime()方法设置1970年1月1日起的时间。您可以计算毫秒数并在方法中传递该值。我参考了这个页面来计算毫秒数。
在您的代码中进行上述更改后,我能够创建一个事件。
希望有帮助!
相关文章:
- 使用<ahref>使用谷歌脚本在谷歌表单GUI中标记
- 如何从谷歌脚本中获取JS变量
- 什么'这个谷歌脚本错了
- 如何使用谷歌脚本将html表单数据保存到谷歌电子表格中
- 在谷歌脚本中重新触发触发器
- 谷歌脚本在第二次调用Gmail后返回null
- 我可以在谷歌脚本编辑器(谷歌应用程序脚本)中调试JavaScript代码吗
- 将名称添加到上次编辑(谷歌脚本)
- 如何在谷歌脚本中使用函数.getLastRow()
- 在html中使用谷歌脚本api
- 谷歌脚本-从网站论坛解析HTML-并将数据写入工作表
- 谷歌脚本查看文本是否包含值
- 谷歌脚本在5分钟后删除电子表格行
- 谷歌脚本javascript中的谷歌函数=importhtml解析问题
- 谷歌脚本创建了两个电子表格,而不是一个
- 简单的谷歌脚本,将A列的内容复制到B列
- 谷歌脚本在对象中找不到函数LastIndexOf
- 谷歌脚本如果文件名包含x字符串日志“;x被发现“;缺少括号
- 加速谷歌脚本中的onEdit功能-有时没有响应
- 谷歌脚本从code.gs返回到index.html