onescales/google-calendar-ics-to-google-sheets
Simple steps to export Google Calendar, get a .ics file and import it to Google sheets.
Export Google Calendar ICS to Google Sheets
No GitHub topics on this repo.
- JavaScript93.5%
- HTML6.5%
Placement
Every place and its price$3
Nobody has bought this repo a place yet. Listing is free. Paid placement starts at $3, and $18 puts it at the top. You pay once: a place holds until another repo spends more, and then it moves down, never off. No subscription, no expiry, no refunds.
1 Review
This project offers a practical, dependency-free way to import calendar data into Google Sheets without handing an ICS file to a third-party conversion service. The Apps Script adds a clear spreadsheet menu, opens a simple upload dialog, unfolds continued ICS lines, extracts common event fields, captures attendees, supports optional date filtering, and writes results in one efficient setValues operation. It also expands basic daily, weekly, monthly, and yearly recurrence rules, including monthly patterns such as the first or last weekday. The README gives short setup instructions, links to a visual tutorial, explains the Excel export path, and the repository preserves earlier code versions alongside the current GPLv3-licensed implementation.
The largest concern is destructive behavior. handleICSUpload clears the active sheet before confirming that valid output will be written. An empty file, unsupported calendar, date range with no matches, or parsing problem can therefore erase existing spreadsheet content. Imports should target a dedicated sheet, validate the complete result first, ask before replacement, and ideally preserve a backup. Calendar text should also be neutralized before setValues, because fields beginning with formula characters can be interpreted by Google Sheets as formulas. File-size and occurrence limits are needed as well, since each recurring event can expand to 10,000 rows and a large ICS file can exceed Apps Script quotas.
The parser handles only a limited subset of iCalendar. It ignores TZID and VTIMEZONE, treating local timestamps as UTC, and does not process EXDATE, RDATE, RECURRENCE-ID, cancellations, multiple BYDAY values, BYMONTHDAY, or escaped text. Recurring events are always capped at today, even when “Import All Dates” is selected. The inclusive end-date filter actually uses midnight at the start of the selected day, so later events on that date may be omitted. Missing DTEND values can also produce invalid recurring durations. These limitations should be documented and covered with representative fixtures. There are currently no automated tests, CI workflow, Apps Script manifest, failure handler in the upload dialog, security guidance, or contribution documentation. The duplicated current code under the root, v2, and versions directories also creates avoidable drift risk. Improving safety first, then adding standards-focused tests, would make this useful importer much more dependable.
