Googleシートをカレンダーにリンクして、カレンダーイベントを自動的に作成し、Googleシートで更新されたときに更新しようとしています。私のGoogleシートは新しい建物の開店日と新しい建物の建設開始日を追跡するので、該当する場合は2つのカレンダーイベントを作成する必要があります(日付の1つだけが記入されていることがあります)。Googleシートをリンクして自動的にカレンダーイベントを作成し、Googleシートが更新されたときにそれらを更新する
シートの見出しは、「Loc。#」、「Location」、「Cons Start」、および「Whse Open」です。 これらの見出しのそれぞれの値は、別のシートへの参照から取り込まれ、参照のためにそのシートから自動的に更新されます。
私はJavaScriptで最も傾いていないけど、今のところGoogleのために私が持っているコードは次のようにスクリプトがあるアプリ:
// Calendar ID can be found in the "Calendar Address" section of the Calendar Settings.
var calendarId = '[email protected]';
// Configure the year range you want to synchronize, e.g.: [2006, 2017]
var years = [2017,2020];
// Date format to use in the spreadsheet.
var dateFormat = 'M/d/yyyy H:mm';
var titleRowMap = {
'loc#': 'Loc. #',
'location': 'Location',
'conStart': 'Cons Start',
'whseOpen': 'Whse Open',
};
var titleRowKeys = ['loc#', 'location', 'conStart', 'WhseOpen'];
var requiredFields = ['loc#', 'location', 'conStart', 'WhseOpen'];
// This controls whether email invites are sent to guests when the event is created in the
// calendar. Note that any changes to the event will cause email invites to be resent.
var SEND_EMAIL_INVITES = false;
// Setting this to true will silently skip rows that have a blank start and end time
// instead of popping up an error dialog.
var SKIP_BLANK_ROWS = false;
// Updating too many events in a short time period triggers an error. These values
// were tested for updating 40 events. Modify these values if you're still seeing errors.
var THROTTLE_THRESHOLD = 10;
var THROTTLE_SLEEP_TIME = 75;
// Adds the custom menu to the active spreadsheet.
function onOpen() {
var spreadsheet = SpreadsheetApp.getActiveSpreadsheet();
var menuEntries = [
{
name: "Update from Calendar",
functionName: "syncFromCalendar"
}, {
name: "Update to Calendar",
functionName: "syncToCalendar"
}
];
spreadsheet.addMenu('Calendar Sync', menuEntries);
}
// Creates a mapping array between spreadsheet column and event field name
function createIdxMap(row) {
var idxMap = [];
for (var idx = 0; idx < row.length; idx++) {
var fieldFromHdr = row[idx];
for (var titleKey in titleRowMap) {
if (titleRowMap[titleKey] == fieldFromHdr) {
idxMap.push(titleKey);
break;
}
}
if (idxMap.length <= idx) {
// Header field not in map, so add null
idxMap.push(null);
}
}
return idxMap;
}
// Converts a spreadsheet row into an object containing event-related fields
function reformatEvent(row, idxMap, keysToAdd) {
var reformatted = row.reduce(function(event, value, idx) {
if (idxMap[idx] != null) {
event[idxMap[idx]] = value;
}
return event;
}, {});
for (var k in keysToAdd) {
reformatted[keysToAdd[k]] = '';
}
return reformatted;
}
をこれを実現するために次に何をすべきか本当にわかりません。これを実装する方法に関する提案はありますか?