Ich versuche, ein Blatt zu erstellen, das Ereignisse in mehreren Google-Kalendern von einem einzigen Google-Blatt erstellt. Ich benutze ein Blatt, das von der fantastischen Lösung auf diesem Pfosten Create Google Calendar Events from Spreadsheet but prevent duplicates von Mogsdad geändert wird. Jedoch habe ich meine Arbeit verdreifacht, um in 3 verschiedene Kalender zu gehen, und möchte meinen ersten Versuch beim Programmieren haben. Meine Idee ist, ich möchte einen Schritt weiter gehen und fügen Sie eine Dropdown-Spalte (beschriftet Status) mit entweder (unbestätigt, speichern Sie das Datum, bestätigt), die dann eine gerade in einem oder alle drei Kalender mit dem gleichen Namen wie die Bedingung erstellt Dropdown-Liste.Erstellen von Ereignissen in mehreren Google-Kalendern aus der Kalkulationstabelle
Mein Blatt ist so angeordnet, wie: -
Datum | Titel | Startzeit | Endzeit | Standort | Beschreibung | Auch ID | Status | Bestätigte Details | Bestätigte Startzeit | bestätigte Endzeit |
Wie Sie sehen können, ist meine Idee etwas anders im bestätigten Kalender als die anderen beiden.
Der bestehende Code ich verwende ist
/**
* Adds a custom menu to the active spreadsheet, containing a single menu item
* for invoking the exportEvents() function.
* The onOpen() function, when defined, is automatically invoked whenever the
* spreadsheet is opened.
* For more information on using the Spreadsheet API, see
* https://developers.google.com/apps-script/service_spreadsheet
*/
function onOpen() {
var sheet = SpreadsheetApp.getActiveSpreadsheet();
var entries = [{
name : "Export Events",
functionName : "exportEvents"
}];
sheet.addMenu("Calendar Actions", entries);
};
/**
* Export events from spreadsheet to calendar
*/
function exportEvents() {
var sheet = SpreadsheetApp.getActiveSheet();
var headerRows = 1; // Number of rows of header info (to skip)
var range = sheet.getDataRange();
var data = range.getValues();
var calId = "[email protected]";
var cal = CalendarApp.getCalendarById(calId);
for (i=0; i<data.length; i++) {
if (i < headerRows) continue; // Skip header row(s)
var row = data[i];
var date = new Date(row[0]); // First column
var title = row[1]; // Second column
var tstart = new Date(row[2]);
tstart.setDate(date.getDate());
tstart.setMonth(date.getMonth());
tstart.setYear(date.getYear());
var tstop = new Date(row[3]);
tstop.setDate(date.getDate());
tstop.setMonth(date.getMonth());
tstop.setYear(date.getYear());
var loc = row[4];
var desc = row[5];
var id = row[6]; // Sixth column == eventId
// Check if event already exists, delete it if it does
try {
var event = cal.getEventSeriesById(id);
event.deleteEventSeries();
row[6] = ''; // Remove event ID
}
catch (e) {
// do nothing - we just want to avoid the exception when event doesn't exist
}
//cal.createEvent(title, new Date("March 3, 2010 08:00:00"), new Date("March 3, 2010 09:00:00"), {description:desc,location:loc});
var newEvent = cal.createEvent(title, tstart, tstop, {description:desc,location:loc}).getId();
row[6] = newEvent; // Update the data array with event ID
debugger;
}
// Record all event IDs to spreadsheet
range.setValues(data);
}
Also ich merke, ich brauche die neuen Informationen zu definieren, die „bestätigt“ gehen in sowie die 2 zusätzlichen Kalender. Mein Problem ist, dass ich nicht in eine Reihe von if-Schleifen passen kann, um Ereignisse in die 3 Kalender zu leiten. Ich möchte auch, dass die Kalender additiv sind, z. Alle Ereignisse, die in "unbestätigter Kalender" -Ereignisse erscheinen, werden hinzugefügt, um das Datum zu speichern, wenn sie auf diesen Status hochgestuft werden, und erscheinen schließlich in "bestätigt", wenn sie auf diesen Wert gesetzt werden. So erscheint ein bestätigtes Ereignis in allen 3 Kalendern, aber ein unbestätigtes erscheint nur dort.
Ich bin praktisch nagelneu im Programmieren, also sei bitte nett und entschuldige meinen eklatanten Planarismus von anderen (danke Mogsdad) und ich schätze jede Hilfe!
Hallo Tiffany, Vielen Dank das ist sehr hilfreich und funktioniert gut. Ich habe eine Follow-up-Frage, die ich gerne stellen würde. Ich möchte, dass die "bestätigten" Ereignisse in alle 3 Kalender gehen, das "SaveTheDate" in die "SaveTheDate" und "Unconfirmed" Kalender und dann "Unconfirmed" um nur in den "Unconfirmed" Kalender zu gehen. Weißt du, wie ich sie additiv machen kann, anstatt nur den einen Kalender auszuwählen, um auch zu gehen? In meiner ursprünglichen Idee würde ich eine "wenn" if Schleife haben, um sie dann zu jedem Kalender zu senden, aber Ihre Methode lässt mich glauben, dass es einen einfachen Weg geben könnte! Vielen Dank im Voraus –
Siehe meine Antwort - ich habe etwas hinzugefügt, das helfen sollte. Bitte akzeptiere meine Antwort, wenn du der Meinung bist, dass es nützlich ist! –
Ich habe vergessen zu sagen, bevor Ihre vorherige Antwort die scrips Fähigkeit verloren hat, alte Ereignisse zu löschen (um Duplikate zu vermeiden), bis die deleat Ereigniszeile auch aktualisiert wurde. 'try { var event = Kalender ['Unbestätigt']. getEventSeriesById (id);' alles funktioniert jetzt, außer für die 2 neu eingeführten Kalender, löschen Sie keine aktualisierten Ereignisse. Ich habe versucht, 2 zusätzliche Versuchs- und Fangfunktionen mit 'try { var event = Kalender ['Bestätigt'] hinzuzufügen. GetEventSeriesById (id); event.deleteEventSeries(); } catch (e) { } 'aber das scheint nicht zu funktionieren (in der Tat tut nichts eine Idee warum? –