从日历ID中分离base64编码的事件ID并获得该事件的开始时间?



我有以下变量:

var isEventLinkBlank = ssa.getSheetByName("Tracker").getRange(index, 13).isBlank();

用于检查某一列是否为空,然后在if语句中使用。if语句是完美的,但我想弄清楚else语句,在这种情况下,列实际上是填充的。

else {

ss.toast("New date found and updated!", "Notice", 25);
const viewInvite = sheet.getRange(index, 13).getFormula(); 
// or const viewInvite = '=HYPERLINK("https://www.google.com/calendar/u/0/r/eventedit/';
const getEventId  = viewInvite.substring(viewInvite.lastIndexOf("r/") + 2, viewInvite.lastIndexOf("/"));
Logger.log(getEventId);

var timeOfEvent = Utilities.base64Decode(getEventId.split("=")).getStartTime();
isEventLinkBlank = interview_date.setValue(timeOfEvent);
}

当列被填满时,会有一个公式在那里:

=HYPERLINK("https://www.google.com/calendar/u/0/r/eventedit/XXXXXXXXXXXXXXXXX","View Invite")
到目前为止,上面的代码应该:
  1. 读取公式
  2. 只获取XXXXXXXX部分
  3. 解码XXXXXXXX部分(这是事件ID和日历ID)从我解码的)
  4. 将事件ID从已解码的日历ID中分离出来
  5. 利用解码后的事件ID获取事件的开始时间(日期)
  6. 和最后在interview_date变量(指定列)中设置开始时间的值。

但是它吐出"undefined"我试着重做了好几次。

仅供参考lastIndexOf解决方案是由用户提供的,但我似乎无法理解为什么"r/">

谢谢

我相信你的目标如下。

  • =HYPERLINK("https://www.google.com/calendar/u/0/r/eventedit/XXXXXXXXXXXXXXXXX","View Invite")的文本中检索XXXXXXXXXXXXXXXXX的值
  • 你想在谷歌日历上检索事件的开始时间使用检索值XXXXXXXXXXXXXXXXX

修改点:

  • 在您的脚本中,当=HYPERLINK("https://www.google.com/calendar/u/0/r/eventedit/XXXXXXXXXXXXXXXXX","View Invite")用于const getEventId = viewInvite.substring(viewInvite.lastIndexOf("r/") + 2, viewInvite.lastIndexOf("/"));时,检索eventedit的值。在这种情况下,无法检索XXXXXXXXXXXXXXXXX。因此,首先需要修改这个脚本。
  • Utilities.base64Decode(getEventId.split("=")).getStartTime();,Utilities.base64Decode()返回字节数组。所以.getStartTime()不能使用

当上面的点被反射到脚本中时,它变成如下所示:

修改脚本:

来自:
const viewInvite = sheet.getRange(index, 13).getFormula(); 
// or const viewInvite = '=HYPERLINK("https://www.google.com/calendar/u/0/r/eventedit/';
const getEventId  = viewInvite.substring(viewInvite.lastIndexOf("r/") + 2, viewInvite.lastIndexOf("/"));
Logger.log(getEventId);

var timeOfEvent = Utilities.base64Decode(getEventId.split("=")).getStartTime();
isEventLinkBlank = interview_date.setValue(timeOfEvent);
:
const viewInvite = sheet.getRange(index, 13).getFormula();  // or const viewInvite = '=HYPERLINK("https://www.google.com/calendar/u/0/r/eventedit/XXXXXXXXXXXXXXXXX","View Invite")'
const getEventId = viewInvite.match(/eventedit/(w+)/);
if (getEventId && getEventId.length == 2) {
const eventId = Utilities.newBlob(Utilities.base64Decode(getEventId[1])).getDataAsString().split(" ");
const calendarId = "###";  // Please set your calendar ID here.
const timeOfEvent = CalendarApp.getCalendarById(calendarId).getEventById(eventId[0]).getStartTime();
Logger.log(eventId[0]);

isEventLinkBlank = interview_date.setValue(timeOfEvent);
}

注意:

  • 在这个修改后的脚本中,它假设您的interview_date可以用于放置值,viewInvite是与HYPERLINK("https://www.google.com/calendar/u/0/r/eventedit/XXXXXXXXXXXXXXXXX","View Invite")类似的值。

引用:

  • base64Decode(编码)
  • newBlob(数据)
  • getEventById (iCalId)

相关内容

  • 没有找到相关文章

最新更新