How to export Google Calendar to Excel (and fix the .ics)
Maksim Norkin (opens in a new tab)Product
· Updated · 8 min read
Google Calendar exports a .ics file, not a spreadsheet. Here's how to export Google Calendar to Excel as one row per meeting, with fixes for times and repeats.
In your calendar
Tue 27
Wed 28
Thu 29
In your spreadsheet
You can export Google Calendar to Excel, but not in one click: Google Calendar's only export is a .ics calendar file, which is made for other calendar apps, not for a spreadsheet. This guide gets your events out, turns the file into a sheet with a row for each event, and fixes the times, repeats and all-day events that usually come out wrong. It works in Excel and in Google Sheets, with nothing to install.
Google Calendar exports in one format, iCalendar, as a .ics file. It exists so other calendar apps can import your events, so it is written as text, one property per line: each event starts with BEGIN:VEVENT, its title is a SUMMARY line, its start a DTSTART line, and it ends with END:VEVENT. Google offers no CSV or XLSX option, so the work is turning those lines into rows.
Opened as text
one event = many lines
Three things decide whether you can export at all, per Google's help page: you need a computer, since the Google Calendar app can't export; you need the "Make changes and manage sharing" permission on the calendar; and on a work or school account, your administrator may have turned export off.
To export one calendar:
- Open Google Calendar in a browser on a computer.
- Under My calendars, point to the calendar and click its ⋯ menu.
- Choose Settings and sharing.
- Under Calendar settings, click Export calendar. A .ics file downloads.
To export every calendar you can manage:
- Click the Settings gear at the top right, then Settings.
- On the left, click Import & export.
- Under Export, click Export. A .zip file downloads, holding one .ics file per calendar. Unzip it and work with the file of the calendar you need.
The idea: put the lines in one tab, label each line with the event it belongs to, then build a second tab that looks up each event's title, start, end and location. The formulas below work in Excel and in Google Sheets.
Raw: one line per row
Bits nameCits valueDits event
Events: one row per event
- Get the lines into a sheet. Open the .ics file in a plain text editor (TextEdit or Notepad), select everything and copy it. In a new spreadsheet, rename the first tab Raw, click A1 and paste. Each line lands in its own row in column A.
- Split each line into a name and a value. The name is everything before the first colon, the value everything after it. Put these in B1 and C1:
| Cell | Formula | What it gives |
|---|---|---|
| B1 | =LEFT(LEFT(A1, FIND(":", A1&":")-1), FIND(";", A1&";")-1) | The line's name, such as DTSTART |
| C1 | =MID(A1, FIND(":", A1&":")+1, 999) | The value, such as 20261027T090000Z |
| D1 | =COUNTIF($A$1:A1, "BEGIN:VEVENT") | Which event the line belongs to |
| E1 | =D1&"|"&B1 | A key for the lookup, such as 3|SUMMARY |
- Build the events tab. Add a second tab, Events. In row 1, type the headings Event, SUMMARY, DTSTART, DTEND and LOCATION, spelled exactly like that, since the lookup matches them. In column A, number the rows 1, 2, 3… up to the largest number in Raw's column D.
- Look each value up. In B2, put this, then fill it right to E and down to your last event:
=IFERROR(INDEX(Raw!$C:$C, MATCH($A2&"|"&B$1, Raw!$E:$E, 0)), "")
You now have one row per event. Copy the Events tab and paste it back as values only, so it no longer depends on Raw, and rename the headings to Title, Start, End and Location if you like. A few lines in Raw start with a space: in an .ics file, a long line is folded onto the next, and the space marks the continuation. They are mostly descriptions, which this sheet leaves out; if a title is cut short, join its pieces by hand.
If you'd rather end up with a CSV, or don't have Excel, do the steps above in Google Sheets: the same paste, the same formulas and the same two tabs. Then, with the Events tab open, choose File › Download › Comma-separated values (.csv), and check that the file holds your events rather than the raw lines. Excel opens that CSV too, and the sheet itself is a way to get Google Calendar into Google Sheets for a report you share.
In the file
20261027T090000Z
UTC
As a date
In your time zone
iCalendar writes a time as year, month, day, a T, then hours, minutes and seconds. To turn the value in B2 of Events into a date and time your spreadsheet can sort and add up, put this in a new column:
=DATE(LEFT(B2,4), MID(B2,5,2), MID(B2,7,2)) + IF(LEN(B2)>8, TIME(MID(B2,10,2), MID(B2,12,2), MID(B2,14,2)), 0)
Format the column as a date and time. Then check the end of the original value. In iCalendar, a time that ends in Z is in UTC, so add your offset from UTC: +2/24 for two hours ahead, -5/24 for five behind. Remember that the offset changes when the clocks do, so a sheet spanning a summer and a winter needs both. A time with no Z is in the time zone named on its line in Raw, after TZID=.
For a timesheet, the length of each meeting in hours is the end minus the start, times 24.
In iCalendar, an all-day event has a date and no time (20261027), so the formula above gives it midnight, and its end date is not included: a one-day event ends on the day after. Subtract one from the end of each all-day event, or filter them into a tab of their own.
In iCalendar, a repeating event can be a single entry with an RRULE line that says how it repeats. If a weekly meeting shows up as one row, dated at its first occurrence, that's why, and an occurrence you moved can show up as a row of its own. Expanding the rule into every date by hand is slow. If you need each occurrence, for a timesheet say, copy the Schedule view for that date range instead, as below.
In iCalendar, each guest is an ATTENDEE line, so the lookup only finds the first. To list an event's guests, filter Raw to the rows whose column B says ATTENDEE and whose column D is that event's number. Each value is the guest's address after mailto:.
Tue 27 Oct
09:00–10:00Design review
14:00–14:30Hiring sync
Wed 28 Oct
11:00–11:30Budget call
Thu 29 Oct
12:30–13:30Team lunch
- 1Switch to ScheduleOne list for the dates you need
- 2Select the listFrom the first day to the last event
- 3Paste as plain textInto an empty sheet
To export a shared Google Calendar, you need the same permission as for your own: Make changes and manage sharing. If someone shared theirs with you to view, the export isn't there, but you can still copy what you see. In Google Calendar, switch the view to Schedule, which lists the period's events one after another. Move to the dates you need, select the list from the first day to the last event, and paste it into an empty sheet as plain text.
It won't paste as neat rows the first time. How to copy and paste it properly, and fold a list that pastes as one column back into rows, is in our guide to exporting a list from any site.
Keep the spreadsheet. Next month, export again, clear Raw, paste the new lines into A1 and fill the formulas down as far as the new lines go: the Events tab follows. Extend its numbered rows if you have more events than last time. If you do this every week and wish the calendar had the button itself, our guide to building your own extension for a button the site lacks is the next step up.
Tabless is a browser extension that builds what you ask for from the sites you allow; nothing is typed or submitted without your OK. It isn't open yet. An export like this one is the kind of job we're building it for: asking in plain words for "my meetings this month, one row each, with the title, start, end and guests", and getting it as a CSV or XLSX file.
It's designed to read through the session your browser already has, so there are no API keys or passwords to hand over, and to ask before it reads each site. You sign in to Tabless with a Wix account.
Google Calendar's export has no date range: it exports the whole calendar. Convert it as above, then filter or sort the Start column to the dates you need and delete the rest. For a short range, copying the Schedule view for those dates is quicker.
Export needs a computer, not the app, and the Make changes and manage sharing permission on that calendar, and a work or school administrator can turn it off. If you exported all calendars, the .zip holds one file per calendar, so open the one you meant. A file with no BEGIN:VEVENT lines has no events to convert.
Not directly: Google Calendar exports only a .ics file. Paste its lines into Google Sheets and use the same formulas and two tabs as above, and the Events tab is your calendar in Google Sheets, ready to share or download as CSV.
Not yet. Tabless isn't open, and exports like this one are among the jobs we're building it for. Join the waitlist, and we'll let you know when you can try Tabless.