我有以下变量:
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")
到目前为止,上面的代码应该:
- 读取公式
- 只获取XXXXXXXX部分
- 解码XXXXXXXX部分(这是事件ID和日历ID)从我解码的)
- 将事件ID从已解码的日历ID中分离出来
- 利用解码后的事件ID获取事件的开始时间(日期)
- 和最后在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)