【问题标题】:Google Script: Sheets working hours data to Events in Calendar [duplicate]Google Script:将工作时间数据记录到日历中的事件[重复]
【发布时间】:2022-01-06 04:54:31
【问题描述】:

我的工作时间在表格文档中,我想用它在日历中制作事件。

按照教程:

https://cloud.google.com/blog/products/g-suite/g-suite-pro-tip-how-to-automatically-add-a-schedule-from-google-sheets-into-calendar

我有这个脚本:

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 &lt;&gt; "",concatenate(text(A2,"dd/mm/yyyy")&amp;" "&amp;text(C2,"hh:mm:ss")),"")

=IF(D2 &lt;&gt; "",concatenate(text(A2,"dd/mm/yyyy")&amp;" "&amp;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 会忽略公式,只传递单元格的值,所以我不认为这是问题所在,但我认为我最好提及它以便全面披露。

【问题讨论】:

标签: google-apps-script google-sheets google-calendar-api


【解决方案1】:

方法是createEvent(String,Date,Date)

您正在发送createEvent(String,String,String)

您需要将您的字符串解析为日期。

// Creates an event for the moon landing and logs the ID.
var event = CalendarApp.getDefaultCalendar().createEvent('Apollo 11 Landing',
    new Date('July 20, 1969 20:00:00 UTC'),
    new Date('July 21, 1969 21:00:00 UTC'));
Logger.log('Event ID: ' + event.getId());

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-11-11
    • 2014-05-15
    • 2013-12-31
    • 1970-01-01
    • 2021-06-14
    相关资源
    最近更新 更多