Skip to content

Public workbook exceptions

Unreleased

This exception contract is in source and has not shipped in either edition. Community 2.0.36 and Commercial 2.3.0 can raise the underlying error instead, for example zipfile.BadZipFile from load_workbook on a file that is not a ZIP package. Until a release carries the contract, catch those errors alongside InvalidFileException.

Catch wolfxl.utils.exceptions.InvalidFileException for malformed XLSX source content discovered by load_workbook/open, worksheet reads, calculate, recalculate, or save. Source decoding is lazy: successful loading does not prove that every worksheet can be read or recalculated.

from wolfxl import load_workbook
from wolfxl.utils.exceptions import InvalidFileException

try:
    with load_workbook("input.xlsx") as workbook:
        rows = list(workbook.active.values)
        workbook.calculate()
        workbook.save("output.xlsx")
except InvalidFileException as error:
    original_error = error.__cause__

Error families

Public operation Malformed-source failures Other exceptions callers should handle
load_workbook, open InvalidFileException for unrecognized input and XLSX ZIP/XML decoding failures, including corrupt DEFLATE and unsupported ZIP compression TypeError for invalid source types; ValueError for invalid options or passwords; NotImplementedError for unsupported format/mode combinations; RequiresWolfXLProError for features requiring the add-on; NumbersImportError for Numbers decoding refusals
Cell reads, row/column iteration, dimensions, value chunks InvalidFileException for native source XML, reference and shared-string decoding failures ValueError or CellCoordinatesException for invalid caller coordinates, ranges and chunk sizes; KeyError for an unknown requested sheet; WorkbookClosedException after closing
calculate, recalculate InvalidFileException for source decoding during formula intake or cell hydration ValueError for invalid calculation options or perturbations; ReadOnlyWorkbookException for committed recalculation on read-only workbooks; documented calculation errors such as UnsupportedRustFormula, FormulaErrorResultError and RustCalcBindingError for formula or backend refusals
save InvalidFileException for source decoding during formula-cache collection, source promotion or worksheet flushing; invalid non-spreadsheet declarations for the workbook part are refused during promotion ValueError, NotImplementedError, ReadOnlyWorkbookException, WorkbookClosedException and documented save-policy errors for invalid requests or unsupported operations; filesystem/output-stream errors for destination failures

Filesystem failures with an OS error number retain their original exception type. InvalidFileException also inherits from OSError and remains compatible with openpyxl's exception of the same name. A non-ZIP OOXML input can additionally be caught as zipfile.BadZipFile.

When wrapping a decoder or source-validation error, WolfXL retains the original exception in __cause__. Already typed file errors retain their existing cause rather than receiving another wrapper. Format-identification refusals without an underlying decoder exception do not fabricate a cause. Python warning callbacks, custom formula callbacks, cancellation and feature-specific policy refusals retain their own documented contracts.

The contract normalizes source-decoder failures when they occur. It does not require eager validation by every operation. Native streaming can filter out-of-grid cells, and calculation can leave unrelated source scalars unread.

A macro-enabled spreadsheet workbook declaration is valid. A VBA-project or Word document declaration for the spreadsheet workbook part is a different case.

Reader and package refusals

Catch InvalidFileException for an out-of-range shared-string index, for nonascending or repeated rows refused by a read-only reader, and for unsafe ZIP metadata or package-size admission failures. The native refusal message and recovery advice remain available; native admission refusals also retain their INVALID_SOURCE diagnostic code. Explicit Limits budget failures remain LimitExceeded, and invalid caller options remain ValueError.

Reproducible coverage

tests/test_public_exception_contract.py contains a deterministic, standalone package generator and the 27 malformed cases: ten deeply nested unknown-element positions, an unclosed row, six invalid cell references, three shared-string-table failures, an empty sheet title, three damaged DEFLATE members, unsupported ZIP compression, and two non-spreadsheet workbook-part declarations. The same tests exercise deferred read/calculation/save failures, direct and streaming reads, valid path/bytes/stream inputs, and macro-enabled workbook saves. No external corpus is needed.