我搜索了一些有关循环中 getRange() 错误的类似问题,但我仍然不确定最好的解决方案是什么。
遍历范围,将字符串附加到每个 在 Google 表格中找不到方法 getRange(int,int)
我的专栏设置为: 第 1 列复选框 第 2 栏事件 第 3 栏开始 第 4 栏结束 第 5 栏 说明 第 6 栏 电子邮件 第 7 栏 POC 第 8 列事件 ID
此脚本会遍历所有被检查的行,以确定是否存在当前的 eventID,如果不存在,则创建一个新的 eventID 并设置其值。
这就是错误的来源:
EventsData.getRange(row[7]).setValue(newEventID);
。
您能否给我一些关于如何最好地制定 getRange() 以包含循环的指导?
function ReplaceOrCreateEvent()
{
var cal = CalendarApp.getCalendarById("calendarID");
var EventsData = SpreadsheetApp.getActiveSpreadsheet().getSheetByName('SHEET_NAME');
var rows = EventsData.getDataRange().getValues();
var headers = rows.shift();
rows.forEach(function(row)
{
if(row[0])
{
Logger.log(JSON.stringify(row));
var eventID = row[7];
if(eventID != 0)
{
var event = cal.getEventById(eventID);
event.deleteEvent();
Logger.log(event);
}
var title = row[1];
var desc = row[4];
var tstart = row[2];
var tstop = row[3];
var newEvent = cal.createEvent(title, tstart, tstop, {description:desc});
var newEventID = newEvent.getId();
EventsData.getRange(row[7]).setValue(newEventID);
Logger.log(newEventID);
}
});
}
我尝试为上述 getRange() 行设置静态值,它有效:
EventsData.getRange(2,8).setValue(newEventID);
但这不会循环。
我尝试过使用
EventsData.row[7].setValue(newEventID);
和eventID.setValue(newEventID);
,但不起作用。
感谢您的关注!
当你的展示脚本修改后,下面的修改如何?
通过此修改,
newEventID
的值被放入已处理行的“H”列中。
function ReplaceOrCreateEvent() {
var cal = CalendarApp.getCalendarById("calendarID");
var EventsData = SpreadsheetApp.getActiveSpreadsheet().getSheetByName('SHEET_NAME');
var rows = EventsData.getDataRange().getValues();
var headers = rows.shift();
rows.forEach(function (row, i) { // Modified
if (row[0]) {
Logger.log(JSON.stringify(row));
var eventID = row[7];
if (eventID != 0) {
var event = cal.getEventById(eventID);
event.deleteEvent();
Logger.log(event);
}
var title = row[1];
var desc = row[4];
var tstart = row[2];
var tstop = row[3];
var newEvent = cal.createEvent(title, tstart, tstop, { description: desc });
var newEventID = newEvent.getId();
EventsData.getRange(i + 2, 8).setValue(newEventID); // Modified
Logger.log(newEventID);
}
});
}