Skip to main content
Three small features that share a habit: each takes a list of tuples rather than dictionaries.

Formulas

list[tuple[int, int, str, str | None]]
(row, col, formula, cached_value).

Cached values

The fourth element is what the cell displays before Excel recalculates. None leaves it empty until someone opens the file.
When the formula reaches outside the workbook, takes real time to compute, or when something might read the file without recalculating, such as a preview pane, another library, or an automated pipeline.
For ordinary local formulas, and always for volatile functions such as NOW() or RAND() where a cached value would be stale on arrival.
Jetxl doesn’t check a cached value against the formula. Supply a wrong one and the sheet shows it until the first recalculation, then silently changes. Only cache values you actually computed.
(row, col, url, display_text). A None display shows the raw URL.
mailto: works, and so do the other schemes Excel understands. A display text of None is fine for short URLs and unreadable for long ones.

Merged cells

list[tuple[int, int, int, int]]
(start_row, start_col, end_row, end_col).
A merge keeps only the top-left value and discards the rest. Merged cells also break sorting and filtering over the range, so keep them in title blocks and out of your data.