Google Script:将工作时间数据记录到日历中的事件[重复]

Posted

技术标签:

【中文标题】Google Script:将工作时间数据记录到日历中的事件[重复]【英文标题】:Google Script: Sheets working hours data to Events in Calendar [duplicate] 【发布时间】: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 会忽略公式,只传递单元格的值,所以我不认为这是问题所在,但我认为我最好提及它以便全面披露。

【问题讨论】:

开始和结束时间的参数必须是日期,而不是字符串。您使用的连接公式不是正确的方法。在这里查看我的答案:***.com/questions/23508261/… 【参考方案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());

【讨论】:

以上是关于Google Script:将工作时间数据记录到日历中的事件[重复]的主要内容,如果未能解决你的问题,请参考以下文章

C# 后台如何向SQL数据库中插入一定时间范围内的随机日期值,到日就可以!!

Google-Apps-Script 无法使用 getDataRange().setValues() 写回数据库

该脚本工作正常,但不在“google-apps-script”中

您无法删除工作表 Google Sheets Script 上的所有行

可以获取当前时间,但是保存到数据库时就只显示到日,我想要显示yyyy-MM-dd HH:mm:ss

将 showModalDialog() 的内容添加到剪贴板 Google Script