Turn a gettext PO or POT catalog into an Excel sheet a translator or vendor can edit, then load it straight back to PO — plural forms, contexts, the header, placeholders and the fuzzy flag all preserved, every entry keyed by its context. Not generic text-to-table — the one step a gettext handoff actually needs.
This conversion exists so gettext tooling and translators each use the format they're comfortable with — without losing anything in between.
The bilingual catalog format the GNU gettext toolchain and editors (Poedit, Lokalize, Weblate, Crowdin…) use: one entry per string with a msgid and msgstr, an optional msgctxt to disambiguate, plural forms (msgid_plural + msgstr[0], msgstr[1]…) governed by the header's Plural-Forms, and a fuzzy flag marking strings that need review. Precise — not something to hand-edit by eye.
The interface translators, reviewers and vendors find most natural: one row per string, source and translation side by side, easy to filter, bulk-edit and annotate. The catch: open a .po in raw Excel and the plural forms scatter, the contexts blur, the fuzzy flag is lost — and it won't load back into the toolchain.
What this tool guards is exactly that "won't load back": on export it expands each plural entry to one row per form (tagged plural:0, plural:1… in the Type column), keeps each context in the Key column, preserves the fuzzy flag so unreviewed strings stay marked, and stores the header verbatim in a reserved @@po.header row — so the sheet rebuilds into a valid PO catalog on the way back. A few PO constructs can't survive a spreadsheet and are reported, never silently dropped: translator and extracted comments, source references, previous-msgid hints, non-fuzzy format flags (c-format…) and obsolete entries — and compiled .mo files are not supported (text PO/POT only).