【发布时间】:2017-04-28 03:37:45
【问题描述】:
我从以下网站借用/修改了以下脚本。 该脚本也不能以其原始形式工作...从语法上讲它应该可以工作,但由于某种原因 Date() 函数一直失败...
http://qiita.com/kamatama_41/items/be40e05524530920a9d9
我的问题是它在谷歌电子表格中不起作用。我有以下主要问题。
无法正确设置
endDate,结果总是如下日志所示。它不被识别为工作表中的自定义函数。即 =isJapaneseHolidy(somedate) 无法识别。
日志:
[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;
}
以前有人经历过吗?
编辑:
如果我对日期使用值而不是变量,我会得到有效的回报。
请查看下面我使用var startDate = new Date(2012,12,12,0,0,0,0) 进行测试的第一个 Logger.log 输出。
[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:
我刚刚验证过,它似乎不会影响结果,它只是将 PST/PDT 时区的时间显示为getEvents() 函数的输入,输出似乎可以正常工作。
【问题讨论】:
-
运行脚本编辑器的时候,是运行
main()还是isJapaneseHoliday()这个函数? -
我使用 ▶ 按钮运行整个程序。
-
而至于自定义功能为什么不起作用,CalendarApp不能是accessed by custom function
-
使用 Run>Main 来运行你的 main 函数
-
你是对的,它设置为它正在运行的功能,而我没有运行 main
标签: javascript google-apps-script google-sheets