S.O.S。尝试通过 google(工作表 + 脚本)在 google 日历中创建事件,但失败了。我认为这与时间有关?
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?
所以我的脚本基于互联网上 wonderful humans 的许多其他脚本。但是,他们的脚本创建了全天事件,而我只想创建一个小时的事件,所以我对其进行了调整(未成功)。
这是我的脚本
/**
* 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);
}
}
我知道脚本 运行s,因为每次我 运行 exportEvents() 时,google 电子表格都会更新事件 ID。但我怀疑由于 tsart、tstop 变量,实际上没有事件被推送到日历。哦,另外,这是电子表格中包含相关列的行的示例:
2015 年 7 月 10 日 10:09:00 |马蒂 | wyrlwynd@mail.com |新代数 II |第 11 单元填写 | 380 | 2015 年 7 月 17 日 |进行中 | |泽维尔@mail.com
欢迎任何帮助。
您需要更改设置时间
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))
设置时间说明:
将日期设置为指定的毫秒数after/before1970 年 1 月 1 日
示例:
将 1970 年 1 月 1 日增加 1332403882588 毫秒,并显示新的日期和时间:
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)
setTime()方法实际上以毫秒为参数。
您可以查看此page以供参考。
所以,对于这个事件你必须这样做:
var tstart = new Date(dueDate.setTime(1437395333000));
所以事件开始日期值将是:
Mon Jul 20 05:28:53 GMT-07:00 2015
setTime() 方法设置从 1970 年 1 月 1 日开始的时间。您可以计算毫秒数并在该方法中传递该值。我参考这个 page 来计算毫秒。
在您的代码中进行上述更改后,我能够创建一个事件。
希望对您有所帮助!
所以我的脚本基于互联网上 wonderful humans 的许多其他脚本。但是,他们的脚本创建了全天事件,而我只想创建一个小时的事件,所以我对其进行了调整(未成功)。
这是我的脚本
/**
* 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);
}
}
我知道脚本 运行s,因为每次我 运行 exportEvents() 时,google 电子表格都会更新事件 ID。但我怀疑由于 tsart、tstop 变量,实际上没有事件被推送到日历。哦,另外,这是电子表格中包含相关列的行的示例:
2015 年 7 月 10 日 10:09:00 |马蒂 | wyrlwynd@mail.com |新代数 II |第 11 单元填写 | 380 | 2015 年 7 月 17 日 |进行中 | |泽维尔@mail.com
欢迎任何帮助。
您需要更改设置时间
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))
设置时间说明:
将日期设置为指定的毫秒数after/before1970 年 1 月 1 日
示例:
将 1970 年 1 月 1 日增加 1332403882588 毫秒,并显示新的日期和时间:
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)
setTime()方法实际上以毫秒为参数。
您可以查看此page以供参考。
所以,对于这个事件你必须这样做:
var tstart = new Date(dueDate.setTime(1437395333000));
所以事件开始日期值将是:
Mon Jul 20 05:28:53 GMT-07:00 2015
setTime() 方法设置从 1970 年 1 月 1 日开始的时间。您可以计算毫秒数并在该方法中传递该值。我参考这个 page 来计算毫秒。
在您的代码中进行上述更改后,我能够创建一个事件。
希望对您有所帮助!