Skip to content

feat(office-reader,core): read OpenDocument spreadsheets (.ods) (0.7.0) - #306

Merged
russoedu merged 1 commit into
mainfrom
feat/odf-spreadsheet
Oct 16, 2026
Merged

russoedu merged 1 commit into
mainfrom
feat/odf-spreadsheet

Conversation

@russoedu

Copy link
Copy Markdown
Collaborator

Part of #294 (ODF parsers): the spreadsheet first.

  • readOds in @opencraw/office-reader (/ods entry): the same Workbook as readXlsx (typed or text values, merged ranges as A1, hidden rows and sheets, repeated rows and cells expanded, the empty ones the format repeats to its limits dropped, nested tables ignored). Formulas give the stored value; nothing is evaluated.
  • Core recognises .ods by extension, content type and the mimetype entry the file declares (opendocument-sniff), so recipes, extract/table, Studio (grid canvas, picking) and every output work on it unchanged. .odt/.odp are recognised too and refused with what to do, instead of being read as text.
  • The Studio file picker accepts .ods and no longer refuses it.
  • Extension 0.7.0.

Checked: typecheck, lint, unit tests for office-reader, core, studio, studio-ui, cli, mcp; the editor e2e. The .ods unit fixture is generated from incentivi.xlsx (same sheets, merges, hidden rows, an error cell) and a test asserts readOds and readXlsx give the same sheets, rows, merges and hidden rows, in typed and text mode. In Studio, a recipe over that file shows the grid with merged headers, the hidden sheet and hidden row marked.

Not here: .odt and .odp (the same shape as the docx and pptx readers, next), and files exported by LibreOffice itself were not available to test with: the fixture is built to its layout, not exported from it.

🤖 Generated with Claude Code

https://claude.ai/code/session_01TjR6eM2tUwU3NGnKXsmEap

…workbooks (0.7.0)

readOds gives the same Workbook readXlsx does: typed values, merges, hidden rows and sheets.
Core recognises .ods by extension, content type and the mimetype the file declares, so
recipes, Studio and exports work on it unchanged. .odt and .odp are recognised too and
refused with what to do.

Co-Authored-By: Claude Sonnet 5.5 <[email protected]>
Claude-Session: https://claude.ai/code/session_01TjR6eM2tUwU3NGnKXsmEap
@russoedu
russoedu merged commit d973c7e into main Oct 16, 2026
9 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant