【发布时间】:2022-01-06 04:54:31
【问题描述】:
我的工作时间在表格文档中,我想用它在日历中制作事件。
按照教程:
我有这个脚本:
function scheduleShifts() {
/**
Task 1) Open the event calendar
**/
var spreadsheet = SpreadsheetApp.getActiveSheet();
var calendarId = spreadsheet.getRange("D1").getValue();
var eventCal = CalendarApp.getCalendarById(calendarId);
/** Task 2) Pull each shift information into the code, in a form that the code can understand
**/
var signups = spreadsheet.getRange("E2:F100").getValues();
/**
Create the calender entry
**/
for (x=0; x<signups.length; x++) {
var shift = signups[x];
eventName = "Work hours";
var startTime = shift[0];
var endTime = shift[1];
eventCal.createEvent(eventName, startTime, endTime); }
}
但是,我得到了错误:
Exception: The parameters (String,String,String) don't match the method signature for CalendarApp.Calendar.createEvent.
scheduleShifts @ Code.gs:24
因为我不是每天工作,所以表格的数据范围内有空白单元格,这可能是问题吗? 我怎样才能要求脚本忽略该数据范围内的那些空白单元格而不为它们创建事件?
我的工作时间在单独的列中提供了时间和日期,因此我使用此工作表公式将数据转换为 DateTime 格式,并放入 E 和 F 列的新单元格中:
=IF(C2 <> "",concatenate(text(A2,"dd/mm/yyyy")&" "&text(C2,"hh:mm:ss")),"")
=IF(D2 <> "",concatenate(text(A2,"dd/mm/yyyy")&" "&text(D2,"hh:mm:ss")),"")
| A | B | C | D | E | F |
|---|---|---|---|---|---|
| 29/11/2021 | man | 13:30 | 22:30 | 29/11/2021 13:30:00 | 29/11/2021 22:30:00 |
| 30/11/2021 | tir | ||||
| 01/12/2021 | ons | ||||
| 02/12/2021 | tor | 09:30 | 16:42 | 02/12/2021 09:30:00 | 02/12/2021 16:42:00 |
| 03/12/2021 | fre | 09:30 | 16:42 | 03/12/2021 09:30:00 | 03/12/2021 16:42:00 |
| 04/12/2021 | lør | ||||
| 05/12/2021 | søn | ||||
| 06/12/2021 | man | 09:30 | 16:30 | 06/12/2021 09:30:00 | 06/12/2021 16:30:00 |
| 07/12/2021 | tir | 09:30 | 18:30 | 07/12/2021 09:30:00 | 07/12/2021 18:30:00 |
我的理解是使用 .getValues 会忽略公式,只传递单元格的值,所以我不认为这是问题所在,但我认为我最好提及它以便全面披露。
【问题讨论】:
-
开始和结束时间的参数必须是日期,而不是字符串。您使用的连接公式不是正确的方法。在这里查看我的答案:stackoverflow.com/questions/23508261/…
标签: google-apps-script google-sheets google-calendar-api