Build calendar files from reviewed table rows
CSV to ICS conversion turns each eligible spreadsheet row into one calendar event. It is useful for a class timetable, a training schedule, a release checklist or a list of dated activities. The workbench produces files for manual import. It does not connect to a calendar account, send invitations or maintain a subscription. A changed spreadsheet therefore does not automatically update any calendar where an earlier file was imported.
Start with CSV, TSV, pasted table text, a verified XLSX area or the current table from another tool in this workspace. Review the imported table before mapping fields. Title and start are required. Location and description are optional. A source event ID can help retain identity inside the saved project, while a grouping field can divide events into separate files. Suggestions based on explicit column names are only suggestions; check the meaning of every mapped column.
Confirm parsing before interpreting dates
Delimited input first passes through an encoding and parsing review. Choose the correct encoding, delimiter and header behavior. Quoted commas, embedded line breaks and trailing empty cells remain part of the table. Empty or duplicate headers and irregular records require an explicit resolution; the calendar tool does not quietly discard extra fields. Values initially remain text, so a source identifier such as 00123 is not changed to 123.
For XLSX, choose the worksheet and data area, review hidden content warnings, then confirm the area. Stored values, displayed text and saved formula results can differ. A formula without a usable saved result cannot be presented as a freshly calculated answer. Spreadsheet date serials are not guessed to be calendar dates here: import an appropriate displayed date representation or normalize the chosen values in the date tool first. Macro execution and workbook style preservation are outside this workflow.
You can keep dates and times in combined fields or use separate date and time columns. Select an exact source format rather than relying on the browser language. Separate time fields accept hours and minutes or hours, minutes and seconds. A supplied end date without an end time is an error for a timed row. If only the end time is present, explicitly choose whether it shares the start date.
Distinguish all-day dates from timed instants
An all-day event occupies calendar dates, not a midnight instant translated between time zones. The default source end date is the last occupied day, including that day. The workbench converts it to the exclusive end boundary required in the file. October 10 with no end becomes a one-day event starting October 10 and ending at the October 11 boundary. October 10 through October 12 becomes three occupied days and ends at the October 13 boundary.
If your source already stores exclusive boundaries, select that interpretation instead. Check the displayed day count and last occupied date before downloading. In separate-column mode, time cells on all-day rows must be empty, because discarding a supplied time could conceal an input mistake. An all-day flag column uses two exact text values that you configure. Blank values and unexpected spellings are errors rather than implicit false values.
Timed events require an explicit source time zone or a format containing an explicit UTC offset. Enter an IANA name such as Asia/Shanghai and confirm the interpretation. September 28, 2026 at 09:00 in Shanghai becomes 01:00 UTC; an end of 10:00 becomes 02:00 UTC. Both source values and serialized UTC instants appear on the event card. Interface language and device location do not choose a zone for you.
A local clock can skip or repeat an hour when daylight saving changes. This tool blocks nonexistent and ambiguous local times. Use source timestamps containing explicit offsets to identify the intended instant. The two occurrences of 01:30 with offsets minus four and minus five hours are different instants. Timed source years are restricted to 1970–2100; pure all-day dates support years 0001–9999, subject to a valid following end boundary.
Make end times and identities deliberate
A timed event without an end is blocked by default. You can explicitly supply a default duration in whole elapsed minutes, from one minute to 525600 minutes. The preview identifies events that used it. Elapsed time can cross a daylight-saving transition differently from a fixed local-clock difference. A reversed end is also blocked. For separate columns with an empty end date, the optional overnight rule moves a non-later end time to the next date only after you have explicitly chosen same-date interpretation and that overnight rule.
Every exported event has a UID. A mapped source ID is hashed with the project namespace, so the raw business identifier does not become the UID. Without a source ID, a saved row mapping assigns identity. Repeated exports of the same project retain UIDs while DTSTAMP reflects each export time. Duplicate source IDs block all affected rows, including identical duplicates; conflicting contents receive a distinct conflict status. Similar titles and times with different identities are flagged and retained.
Save the project mapping when you need to preserve identities beyond this page session. Restore it against input with identical column names, cell contents and row order. The file contains a project namespace, content fingerprint and row identity mappings, not the complete source table. Treat it as potentially sensitive. A newly uploaded file starts a new project unless you restore a matching mapping. Stable UIDs do not guarantee that every calendar application will replace existing imports rather than create duplicates.
Review scope, problems and grouped delivery
The preview performs complete validation and reports full counts while showing at most twenty valid events. It cannot be downloaded as a completed file. Generate complete events before delivery. Input equals valid events plus failed records; issue counts also include notices and can therefore exceed failed records. Review the issues and failed source rows separately. Each event card exposes source positions and its generated identity. Source positions are logical table records, so a quoted multiline description does not add another event.
Use the checkboxes to select eligible events. Searching titles changes the visible cards only, not export scope. Select all includes every valid event, including those on other pages. The delivery panel states selected events, unselected events and failed rows. Any failed rows require explicit exclusion confirmation before an ICS export is allowed. The issues CSV remains available even when no event can be exported.
A mapped group field uses exact source values. Missing cells and empty strings form different groups. File names use neutral sequence numbers such as calendar-001.ics, with the original group value displayed in the review panel. One selected group without optional reports downloads as ICS. Several groups or requested reports produce a ZIP with a file manifest. Optional reports include issues, mappings, excluded records and the failed source rows. These reports may contain private source values; the full original table is never included by default.
Verify the file and understand its limits
Before download, an independent iCalendar parser reads every generated file and checks event count, UIDs, titles, dates, times and export timestamps. Files use UTF-8, CRLF line endings and folding at seventy-five UTF-8 bytes. Chinese characters and emoji are kept intact across folds. Text commas, semicolons, backslashes and line breaks are escaped so descriptions cannot introduce additional events or properties. The download action regenerates and validates the delivery again.
CSV reports use formula-like text protection, which can add an apostrophe to their cell text. This protection is not added to ICS titles because it would alter the calendar content. The supported output is a minimal event calendar with title, start, end, UID, timestamp, location and description. Recurrence rules, reminders, participants, organizers, invitation methods, attachments and automatic link retrieval are unsupported. URLs in descriptions remain literal text.
The input limit is ten megabytes, one hundred thousand records, two hundred columns and two million cells. Each cell is limited to one hundred thousand characters. Exports allow at most one hundred ICS groups, ten megabytes per ICS and thirty megabytes across the uncompressed package. Reports have separate cell and character limits. A local worker has a thirty-second timeout and can be cancelled. Exceeding a limit stops processing rather than silently exporting a prefix. Target applications may impose smaller limits of their own.
Format validation is confirmed by the automated parser checks, but Google Calendar, Apple Calendar and Outlook imports have not been verified in an isolated target environment. Test a small synthetic file in a disposable calendar before importing real schedules. Calendar display settings can show UTC instants in another local zone; that does not by itself mean the stored instant changed.
Keep edits and private data under your control
Changing a rule marks previous results stale and disables delivery until you regenerate. Undo and redo restore settings, while saved rule files retain mappings and constants without the full source table. Review those files before sharing them. Loading rules requires a matching column schema and fresh confirmation of time interpretation. A cancelled or superseded worker cannot replace a newer result.
Data stays in page memory during tool and language navigation, and refreshing or closing clears it. Save project mappings explicitly if needed. File contents are processed locally, but the website still requests static resources and its host may keep basic access logs. Local processing is not a claim of zero network activity or certified offline operation. The workspace contains no data-reading third-party advertising or session replay. It does not visit links from cells or upload schedules to a calendar service.
Frequently asked questions
How do I convert an Excel schedule to an ICS calendar file?
Import an XLSX workbook or a CSV file, then map the event title, start, and end columns. Confirm the source date format and time zone, generate the events, and review the cards and issues. Select the events you want and verify the output before downloading the ICS file or grouped ZIP.
Can I import the file into Google Calendar, Outlook, or Apple Calendar?
The output uses the iCalendar format and is independently parsed before download. Google Calendar provides a desktop import workflow for ICS files; unpack a ZIP first and import its ICS files. Actual imports into these target applications have not been verified for this tool. Check a small file in a separate test calendar before importing a full schedule.
Why does an all-day event end on the following date in the file?
iCalendar stores an all-day end as an exclusive boundary. An event occupying October 10 needs an end boundary of October 11. Review the last occupied date and day count on the event card. Choose whether your source end date is inclusive or exclusive instead of adjusting dates by guesswork.
Which time zone should I choose for a schedule without offsets?
Choose the time zone in which the source times were written, such as America/New_York for local New York times. It is not necessarily the zone of your computer. Timed events are exported as UTC instants; all-day events remain dates. Ambiguous or nonexistent times around a daylight saving change need correction before export.
Will the calendar update when I edit my spreadsheet?
No. A downloaded file is a snapshot, not a subscription or account connection. Editing the spreadsheet does not update events you already imported. Saved project mappings retain event identities for identical source data, but they cannot guarantee whether a calendar replaces or duplicates events on another import.
Can I create a weekly recurring class or send invitations?
This tool creates one independent event per valid source row. It does not generate recurrence rules or send invitations. List each class date as a separate row if you want separate events, and use your calendar application for recurring schedules or attendee management.
Why are some rows missing from the downloadable events?
Check the issues list for the source row. Missing titles, invalid dates, duplicate event IDs, and an end before the start can block individual records. Failed rows require an explicit exclusion confirmation before valid events can be downloaded. You can include issue and failed-row reports in the ZIP.
Can I export just one team or a few selected events?
Yes. Group by a team or class column and select the valid events you need. Searching titles changes the view only; it does not narrow the export selection. Check the selected count and file summary before downloading. Unselected and failed events are not included in the ICS files.