【问题标题】:GAS: Create calendar event from spreadsheetGAS:从电子表格创建日历事件
【发布时间】:2023-01-19 20:59:37
【问题描述】:

我在电子表格中有以下列:

Email Vorname Name Position Thema 19.02.23 22.02.23 28.02.23
a.b@gmail.com Diego Flores AB C 1
b.c@gmail.com Alex Flores DB F 1
c.d@gmail.com Diego Sanchez GB D 1
d.e@gmail.com Alex Sanchez FB G 1

该电子表格与以下谷歌应用程序脚本链接:

function createCalendarEvents() {
  var spreadsheetId = '1NQULPeaxoaAaNWU4ojapb4R50JEdl62Ip2e9yjUB_sw';
  var calendarId = "diego.flores@gmail.com";
  var sheetName = '2';

  var spreadsheet = SpreadsheetApp.openById(spreadsheetId);
  var sheet = spreadsheet.getSheetByName(sheetName);
  var calendar = CalendarApp.getCalendarById(calendarId);
  var data = sheet.getDataRange().getValues();
  var headers = data.shift();
  // console.log("spreadsheet: "+spreadsheet);
  // console.log("sheet: "+sheet);
  // console.log("calendar: "+calendar);
  // console.log("headers: "+headers);
  // console.log("data: "+data);
  console.log("email: "+email);
  for (var i = 0; i < data.length; i++) {
    var row = data[i];
    var email = row[0];
    var firstName = row[1];
    var lastName = row[2];
    var position = row[3];
    var topic = row[4];
    console.log("email: "+email);
    for (var j = 5; j < row.length; j++) {
      if (row[j] === '1') {
        var date = new Date(headers[j]);
        var eventTitle = firstName + " " + lastName + " - " + position + " - " + topic;
        var event = calendar.createEvent(eventTitle, date, date);
        event.setLocation("Office");
        event.addEmailReminder(15);
      }
    }
  }
}

当日期列中的列包含 1 时,脚本应创建一个事件,其中填充日历 diego.flores@gmail.com 中该行的信息。但是它不起作用,没有创建日历条目。我 100% 确定我拥有日历的授权并且脚本已连接到正确的工作表。日历和电子表格 API 已激活。也许有人可以给我提示或提示。谢谢!

【问题讨论】:

  • 可以提供But something it is not working的详细资料吗?
  • 执行脚本不会创建任何日历事件
  • 谢谢你的回复。从您的回复和脚本中,我提出了一个修改点。请证实。如果那没有用,我深表歉意。

标签: javascript google-apps-script spreadsheet


【解决方案1】:

从您的回复和脚本中,

  • 我认为在你的脚本中,当row[j]是一个数字时,if (row[j] === '1') {应该是if (row[j] === 1) {,或者if (row[j] == '1') {

    • 我认为您当前No calendar event is created by executing the script问题的原因可能是由于此。
  • 根据您的示例数据,我不确定标题标题中的 19.02.2322.02.2328.02.23 日期是否是日期对象。

从上面的情况来看,下面的修改怎么样?

从:

if (row[j] === '1') {
  var date = new Date(headers[j]);
  var eventTitle = firstName + " " + lastName + " - " + position + " - " + topic;
  var event = calendar.createEvent(eventTitle, date, date);
  event.setLocation("Office");
  event.addEmailReminder(15);
}

到:

if (row[j] == "1") {
  var date = headers[j] instanceof Date ? headers[j] : Utilities.parseDate(headers[j], Session.getScriptTimeZone(), "dd.MM.yy");
  var eventTitle = firstName + " " + lastName + " - " + position + " - " + topic;
  var event = calendar.createEvent(eventTitle, date, date);
  event.setLocation("Office");
  event.addEmailReminder(15);
}
  • 如果标题中19.02.2322.02.2328.02.23的日期是日期对象,则可以使用var date = headers[j];代替{var date = headers[j] instanceof Date ? headers[j] : Utilities.parseDate(headers[j], Session.getScriptTimeZone(), "dd.MM.yyyy");

参考:

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-03-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-06-20
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多