在以下示例中,我使用 Apps 腳本根據電子表格輸入安排 Google 日歷事件。這段代碼作業得很好,但是我需要調整它以在源表上做一個小的操作。您可以在此處看到,我過濾范圍以僅包含 D 列 (r[3]) 中具有“待定”值的行。但是,我需要在回圈中包含一行代碼,以便在過濾后的行同步到我的 Google 日歷后,D 列中的相同單元格值會更改為相應單元格的“計劃”。我已嘗試遵循此解決方案,但由于我是 JS 新手,因此無法實施。
Google Apps 腳本 - 基于 for 回圈匹配的單元格中的 .setValue
function calendarSync() {
var ss = SpreadsheetApp.getActiveSheet();
var calendarId = "My Calendar ID";
var eventCal = CalendarApp.getCalendarById(calendarId);
var eventArray = ss.getRange('A2:I500').getValues().filter(r => r[3] == "Pending Schedule");
for (x=0; x<eventArray.length; x ) {
var event = eventArray[x];
var eventName = event[0];
var startTime = event[1];
var endTime = event[2];
var exisEvents = eventCal.getEvents(startTime, endTime, {search: eventName}) //prevents creating duplicate events;
if (exisEvents.length == 0) {
eventCal.createEvent(eventName, startTime, endTime);
}
}
}
uj5u.com熱心網友回復:
一個簡單的解決方案是更改腳本的一些邏輯。而不是使用filteruseif陳述句,然后覆寫整個范圍。
function calendarSync() {
var ss = SpreadsheetApp.getActiveSheet();
var calendarId = "My Calendar ID";
var eventCal = CalendarApp.getCalendarById(calendarId);
var eventArray = ss.getRange('A2:I500').getValues();
for (x = 0; x < eventArray.length; x ) {
var event = eventArray[x];
var eventName = event[0];
var startTime = event[1];
var endTime = event[2];
var status = event[3]; // Used to in the following comparison expression instead of filter
if (status === "Pending Schedule") {
var exisEvents = eventCal.getEvents(startTime, endTime, {
search: eventName
}) //prevents creating duplicate events;
if (exisEvents.length == 0) {
eventCal.createEvent(eventName, startTime, endTime);
eventArray[x][3] = "Scheduled"; // Update the status
}
}
}
ss.getRange('A2:I500').setValues(eventArray); // Overwrite the source data with the modified array
}
PS 如果您使用默認運行時而不是var最好使用constand let,特別是在撰寫復雜腳本時。
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/406032.html
標籤:
