Option one: the iframe embed
Google Calendar can hand you an <iframe> under Settings and sharing → Integrate calendar. Paste it into a page and you have Google's own calendar widget on your site in about a minute.
It is the fastest option and the worst-looking one. It arrives with Google's styling, which will not match your theme and cannot be changed much. It is a separate scrollable box inside your page rather than part of it. It is poor on a phone. Search engines see an empty frame, so none of your events are indexable. And it only works if the calendar is public.
For a quick internal page, it is fine. For a venue's What's On page, it looks like what it is — somebody else's application bolted onto your site.
Option two: subscribe to the .ics feed
Every Google calendar publishes an iCal address: public calendars have a public one, private calendars have a secret one that works without anyone signing in. A WordPress plugin can fetch that address from your own server on a schedule and turn its contents into real events on your site.
This is the option that gets you actual pages — your theme's styling, your layout, indexable by search engines, filterable by category, and available to your other plugins. There is still no API key, no OAuth and no Google Cloud project; the only thing you paste in is a URL.
Option three: a one-off import
If your events are not really changing — a fixed season, a published programme — export the .ics once, import it, and be done. No ongoing connection to break, nothing to monitor. The downside is obvious: the two calendars are now separate, and the website copy is the one that will drift.
Which to pick
If the calendar is public, static, and nobody cares how it looks: iframe. If your programme changes and the website is a sales surface: subscribe to the feed. If you are moving away from Google entirely: import once and stop.
What no keyless option can do is write back to Google. The .ics format is one-way by design, and that is a property of the format rather than a limitation of any plugin.
One thing to verify first
Drop your .ics into the reader above and look at the timezone line. Google usually attaches a proper timezone to each event, but events created by some apps and imports arrive without one. Those are the events that show up an hour out after the next clock change — and they are much easier to fix now than after you have published the page.