Skip to main content
These predate the Arrow interface and support far fewer options. Use write_sheet_arrow unless you specifically need to avoid a DataFrame dependency.

write_sheet

dict[str, list]
required
Column name to list of values. Every list must be the same length.
str
required
Output path.
str | None
default:"None"
Tab label.
list[dict] | None
Charts, same shape as the Arrow functions.

write_sheets

list[dict]
required
Each with name and columns.
str
required
Output path.
int
required
Required and positional.

What you give up

Formatting

No column_formats, cell_styles, conditional_formats, tables, images or validation. Charts are the one extra supported.

Speed

Values come from Python lists rather than Arrow buffers, so the zero-copy advantage doesn’t apply. The published benchmark puts this path at roughly twice the time of the Arrow one.

Supported types

str, int, float, bool, datetime, and None.
NaN and infinity become empty cells here too, matching the Arrow path. See Data types.