1. Arrow or dictionaries?
Arrow — use this
Functions ending in
_arrow. They read DataFrame memory directly and support every formatting feature. You need Polars, Pandas or PyArrow.Dictionaries — legacy
write_sheet and write_sheets. A plain dict of column name to list, with no DataFrame dependency, but slower and charts are the only extra supported.2. One sheet or many?
Singular writes one sheet. Plural takes a list of sheet dictionaries and generates their XML in parallel.3. A file or bytes?
A file on disk
A file on disk
write_sheet_arrow(data, "report.xlsx", ...) takes a filename, returns nothing, and leaves the file where you asked for it.Bytes in memory
Bytes in memory
write_sheet_arrow_to_bytes(data, ...) takes no filename and returns bytes. Use it for HTTP responses, cloud functions, and object storage uploads, anywhere a temporary file would be a nuisance. See In-memory output.The full grid
The four Arrow functions accept the same formatting arguments. Learn them once on
write_sheet_arrow and they carry across.