A valid calendar file is a structured document, not just a list of event blocks. Splitting by a fixed number of lines can leave malformed blocks or lose a time-zone definition that later events depend on.
Keep the calendar wrapper in every file
Each part needs its own BEGIN:VCALENDAR and END:VCALENDAR, plus the calendar-level properties and supporting components. CalPorter copies the calendar wrapper, properties and non-event components into each chunk. That means a large set of time-zone definitions reduces the space available for events in every file.
Keep each UID family together
A series master, exclusions and edited instances work together. Exception records can appear far from the master in an export. CalPorter groups event records by UID before packing chunks. It does not cut a family apart simply to fit a size target.
Measure bytes, not characters
Accented letters and many other characters use multiple bytes in UTF-8. A character count can underestimate the file size. The splitter checks the encoded output against your decimal kB limit. The default 900 kB leaves some room below Google’s documented 1 MB limit.
When a series is too large
If one family or the metadata already exceeds your target, the tool stops with an explanation. Increase the target for an importer that supports it, or prepare a separate reduced calendar deliberately. Dropping exception records silently would make the output smaller but less trustworthy.
Import and inspect each part once
The ZIP contains numbered ICS files. Extract them, import each into the same new test calendar, and compare representative one-off, all-day and recurring events with the source. File splitting does not guarantee provider acceptance or eliminate events already in the destination.
Sources: Google’s documented import limit and the iCalendar structure and recurrence model.