我已经从以下网站借了/修改了以下脚本。该脚本也无法以其原始形式工作...句法应该可以正常工作,但是由于某种原因,date((函数一直失败...
http://qiita.com/kamatama_41/items/be40e055524530920a9d9
我的问题是它在Google电子表格中不起作用。
-
无法正确获得
endDate
设置,它总是如下日志中所示。 -
它在床单中没有被识别为自定义功能。I.E = Isjapaneseholidy(某种程度(未识别。
日志:
[17-04-28 12:34:19:357 JST] Starting execution
[17-04-28 12:34:19:364 JST] Logger.log([Thu Jan 01 09:00:00 GMT+09:00 1970, []]) [0 seconds]
[17-04-28 12:34:19:364 JST] Logger.log([Thu Jan 01 09:00:00 GMT+09:00 1970, []]) [0 seconds]
[17-04-28 12:34:19:401 JST] CalendarApp.getCalendarById([ja.japanese#holiday@group.v.calendar.google.com]) [0.035 seconds]
[17-04-28 12:34:19:424 JST] Calendar.getEvents([Wed Dec 31 16:00:00 PST 1969, Wed Dec 31 16:00:00 PST 1969]) [0.022 seconds]
[17-04-28 12:34:19:425 JST] Execution succeeded [0.062 seconds total runtime]
函数:
function main() {
Logger.log(isJapaneseHoliday(2017,5,3));
}
function isJapaneseHoliday(year, month, day) {
var startDate = new Date(year,month-1,day,0,0,0);
Logger.log(startDate);
var endDate = new Date(year,month-1,day,23,59,59,999);
Logger.log(endDate);
var cal=CalendarApp.getCalendarById("ja.japanese#holiday@group.v.calendar.google.com");
var holidays = cal.getEvents(startDate, endDate);
return holidays.length != 0;
}
以前有人经历过吗?
编辑:
如果我在日期使用值而不是变量,我将获得有效的返回。
请参阅下面的第一个logger.log输出我使用var startDate = new Date(2012,12,12,0,0,0,0)
进行测试。
[17-04-28 13:01:42:098 JST] Starting execution
[17-04-28 13:01:42:107 JST] Logger.log([Wed Dec 12 00:00:00 GMT+09:00 2012, []]) [0 seconds]
[17-04-28 13:01:42:108 JST] Logger.log([Thu Jan 01 09:00:00 GMT+09:00 1970, []]) [0 seconds]
[17-04-28 13:01:42:141 JST] CalendarApp.getCalendarById([ja.japanese#holiday@group.v.calendar.google.com]) [0.032 seconds]
[17-04-28 13:01:42:142 JST] Calendar.getEvents([Tue Dec 11 07:00:00 PST 2012, Wed Dec 31 16:00:00 PST 1969]) [0 seconds]
[17-04-28 13:01:42:146 JST] Execution failed: Event start time must be before event end time. (line 12, file "Code") [0.038 seconds total runtime]
edit2:
正如杰克·布朗(Jack Brown(所提到的那样,我需要运行main((函数才能使此功能正常工作...我正在执行Isjapaneseholiday的功能。默认情况下没有输入。
此外,还提到Googlesheets和GoogleCalendar不允许彼此访问...必须有一种方法...
edit3:
杰克·布朗(Jack Brown(回答了我的问题,我现在面临着不同的问题,但是由于无法进行身份验证,我正在创建一个自定义菜单并将功能添加到此。
https://developers.google.com/apps-script/guides/menus
但是,对于那些试图在脚本中使用公共日历的人,请注意,显然他们(或至少是日语假日日历(在PST/PDT中输入,这会使输出看起来不正确...我尚未知道它是否会影响结果。
edit4:
i刚刚验证,它似乎不影响结果,它只是显示了PST/PDT TimeZone作为getEvents()
函数的输入的时间。
而不是使用cal.getEvents(startDate, endDate)
,您可以尝试使用cal.getEventsForDay(date)
。代码可以修改为:
function main() {
Logger.log(isJapaneseHoliday(2017,5,3));
}
function isJapaneseHoliday(year, month, day) {
var date = new Date(year,month-1,day);
Logger.log(date);
var cal=CalendarApp.getCalendarById("ja.japanese#holiday@group.v.calendar.google.com");
var holidays = cal.getEventsForDay(date);
return holidays.length != 0;
}