Skip to main content
write_sheets_arrow takes a list of sheet dictionaries and generates their XML across threads. You configure each sheet independently, with the same options as a single-sheet write.
num_threads is required and positional here, with no default. Omitting it raises a TypeError. Only write_sheets_arrow_to_bytes defaults it, to 1.

The sheet dictionary

Two keys are required:
Arrow table
required
The sheet contents.
str
required
The tab label.
Everything else is any keyword argument from write_sheet_arrow, used as a key. Formatting, tables, charts, images, validation, conditional formats and appearance all work, set per sheet:

Choosing a thread count

Parallelism is per sheet, so more threads than sheets buys nothing.
Jetxl shares and deduplicates style definitions across sheets, so repeating the same formatting on every sheet costs far less than it might appear.

When sheets differ in shape

Nothing requires sheets to share columns or row counts. A summary sheet of one row can sit beside a detail sheet of a million:
Put the summary first. It becomes the sheet that opens, and it’s what most readers want.