google-apps-script - 忽略空单元格并跳过 Google 表格/日历同步中的重复条目
问题描述
我正在尝试为 Google 表格编写脚本以同步到 Google 日历。我当前的障碍是试图让它读取列中的所有条目,如果我多次运行它,则忽略空单元格并且不重复条目。当我将 getRange 设置为覆盖空单元格的任何内容时,它会出错
例外:参数 (String,String,String) 与 CalendarApp.Calendar.createEvent 的方法签名不匹配。
虽然它仍然会创建条目,但我相信当他看到一个红色错误说出现问题时会担心的人。
另一个问题是每次脚本运行时,它都会重复从以前复制的条目。我该如何防止这种情况?
这是当前脚本。
function onOpen() {
var ui = SpreadsheetApp.getUi();
var menu = ui.createMenu('Sync to Calendar');
var item = menu.addItem('Commit', 'syncCalendar');
item.addToUi();
}
function syncCalendar() {
var spreadsheet = SpreadsheetApp.getActive();
var calendarId = "*******";
var eventCal = CalendarApp.getCalendarById(calendarId);
var signups = spreadsheet.getRange("D3:F10").getValues();
for (x=0; x<signups.length; x++) {
var slot = signups[x];
var startTime = slot[0];
var endTime = slot[1];
var name = slot[2];
eventCal.createEvent(name, startTime, endTime);
}
}
解决方案
- 您想删除问题中显示的错误。
- 在这种情况下,空值包含在
signups
. 您想忽略这些空值。
- 在这种情况下,空值包含在
- 您不想创建重复的事件。
如果我的理解是正确的,这个答案怎么样?请认为这只是几个可能的答案之一。
修改点:
- 为了忽略空值,在这种情况下,
if (name && startTime && endTime) {}
使用。 - 为了避免创建重复的事件,
if (!eventCal.getEvents(startTime, endTime)) {}
使用。
当这些反映到你的脚本中时,它变成如下。
修改后的脚本:
从:for (x=0; x<signups.length; x++) {
var slot = signups[x];
var startTime = slot[0];
var endTime = slot[1];
var name = slot[2];
eventCal.createEvent(name, startTime, endTime);
}
到:
for (x=0; x<signups.length; x++) {
var slot = signups[x];
var startTime = slot[0];
var endTime = slot[1];
var name = slot[2];
if (name && startTime && endTime) { // Added
if (eventCal.getEvents(startTime, endTime).length == 0) { // Added
eventCal.createEvent(name, startTime, endTime);
}
}
}
name
在这种情况下,startTime
和的所有 3 个值endTime
都存在,if 语句变为true
。如果您想修改此条件,请根据您的实际情况进行修改。在上面的脚本中,即使事件标题不同而
startTime
相同endTime
,也不会创建新事件。如果要在事件标题不同的情况下创建新事件,请if (eventCal.getEvents(startTime, endTime).length == 0) {
进行如下修改。if (eventCal.getEvents(startTime, endTime, {search: name}).length == 0) {
参考:
如果我误解了您的问题并且这不是您想要的方向,我深表歉意。
推荐阅读
- javascript - 显示来自 jquery 条件的文本
- macos - 在 macOS 上安装 kivy 框架
- excel - 如何创建切片器以按不同列对数据透视表进行排序
- python - Python/pip 进程在 virtualenv 中被杀死(Apple M1 芯片)
- c# - Xamarin.Forms 无法更改本地设备上 Xamarin.iOS 中的应用程序图标
- laravel - 在 laravel 中使用 composer 安装包时出错
- javascript - 如何使用浏览器内置缓存缓存 Aws HTTP 请求结果?
- python - 如何使用 span 类进行网页抓取 python com?
- python - Python 3 出现此代码错误(另一棵树的子树)
- webpack - 未捕获的错误:无法在 symfony/webpack-encore 和 mdboostrap 中间接使用定义