ZOFFICE // MICROSOFT OFFICE — FEATURE AUDIT

// what Word · Excel · PowerPoint · Access do, mapped against what the zoffice engine implements — status derived from source symbols, not asserted

Docs Engineering Report

This audit maps the Microsoft Office feature surface — Word, Excel, PowerPoint, Access — against what the zoffice engine actually implements today. Granularity is the feature group (styles, charts, track-changes, pivot tables…), not the individual menu command; a command-level list would run to thousands of rows and obscure the shape. Every zoffice status below is grounded in an engine symbol read directly from src/writer.rs, src/calc.rs, src/impress.rs and src/base.rs, cross-checked against the source-derived engineering report.

The single most important finding is a read / write asymmetry. zoffice is a comprehensive, high-fidelity reader of ODF and OOXML across all six apps, and a WYSIWYG viewer in the desktop shell. It is not yet a full authoring suite: writing splits into three tiers, and only the narrowest one is lossless. Read that asymmetry first, then the per-app tables.

Tier 1 — Read

FULL. All six apps parse real ODF/OOXML packages: text, formatting, tables, styles, charts, animations, formulas, database catalogs. This is where zoffice is strongest — close to LibreOffice-grade coverage on the read path.

Tier 2 — Lossless patch

NARROW. replace_lossless (find/replace) and set_cell_lossless (single cell) edit the original package XML in place, preserving all formatting — but only for those narrow operations.

Tier 3 — Full save

CLOSING. Full-save fidelity is being closed incrementally. save_xlsx preserves formulas, merged cells, named ranges and number-vs-text cell types, and save_ods now writes the ODF spreadsheet with the same fidelity as xlsx (values, number/text types, formulas, merged ranges, named ranges); save_docx / save_odt preserve every paragraph property (alignment, indent, spacing, shading, page-break, heading & list level) and full run-level character formatting (bold, italic, underline, strike, font, size, color, caps, super/subscript, letter-spacing). Still dropped: cell number-formats / styles, tables, images.

implemented / full partial — read-only, compute-only, or narrow absent

Summary by component

ComponentMS appReadWrite / editEstimated parity
CalcExcel✓ full — 300+ functions, formula eval 1-cell lossless; full save (xlsx + ods) keeps formulas/merges/named-ranges/types~55% (read-weighted)
WriterWord✓ full — all structures parsed find/replace lossless; full save keeps paragraph properties~35%
ImpressPowerPoint✓ full — slides, animations, media text + positioned shapes save (pptx + odp) + add slide~25%
BaseAccess .odb only, embedded HSQLDB no DDL/DML write~10%

Parity figures are estimates weighted toward the read path; treat them as directional, not measured. The per-feature rows below are the ground truth.

Excel → Calc

reads .xlsx / .xls / .ods / .fods / .csv · engine: src/calc.rs

Feature groupExcelzoffice CalcEvidence / note
Open formatsxlsx, xls, ods, csv xlsx, xls, ods, fods, csvfull OOXML + ODF + legacy OLE2 read
Save formatsfull-fidelity xlsx and ods both keep formulas + merges + named ranges + numeric types; 1-cell losslesssave_xlsx writes <f>/<v>/mergeCells/definedNames; save_ods writes table:formula/spanned merges/table:named-expressions; number-formats + styles still dropped
Formula engine~480 functions 300+ functions, recursive-descent evalmath, stats, financial, date, text, lookup, database, engineering, logical, info families
Dynamic arrays / spillFILTER, SORT, UNIQUE, SEQUENCE implementedExcel-365 dynamic-array family present
Matrix functionsMMULT, MINVERSE, TRANSPOSE implementedMMULT / MINVERSE / MUNIT / MDETERM / TRANSPOSE
Number formattingcustom format codes parsed + applied on displaynumber_formats, format-code engine
Named rangesfull parsed + resolvednamed_ranges_with_refs
Merged cellsfull readenumerated
Comments / notesfull readcalc.comments
Conditional formattingfull editor read-only, not editableconditional_formats enumerates rules
Data validationfull read-only, not editabledata_validations
Charts50+ types, editable read + render data, no editcharts_render / charts_detail
PivotTablesfull drag-drop builder compute only, no builderpivot_compute / pivot_compute_multi
Frozen panesfull read flag onlyhas_frozen_panes
Sheet protectionfull read/enumeratedsheet_protections
Worksheet insert / deletefull absentno add/remove sheet API
Sparklinesfull absent
Slicers / timelinesfull absent
Macros (VBA)full absent
Power Query / Power Pivotfull absent
Solver / Goal Seekfull absent
ExportPDF PDF, HTML, Markdown, CSVcalc.pdf, to_html/to_markdown/to_csv

Word → Writer

reads .odt / .docx / .doc / .rtf / .fodt · engine: src/writer.rs

Feature groupWordzoffice WriterEvidence / note
Open formatsdocx, doc, rtf, odt, txt odt, docx, doc, rtf, fodtOOXML + ODF + legacy OLE2 + RTF read
Save formatsfull-fidelity docx/odt keep all paragraph props; find/replace losslesssave_docx / save_odt write alignment/indent/spacing/shading/page-break/heading/list; run-level char formatting + tables still dropped
Character formattingfull readbold, italic, underline, strike, color, highlight, font, size, super/subscript, caps — writer.rs:80
Paragraph formattingfull readalignment, indent, spacing, shading, page breaks
Tablesfull readcells, borders, colors, merges, row/col spans
Listsfull readnesting levels, ordered vs bullet
Images (inline)full readinline_images
Headers / footersfull readheaders_footers
Hyperlinks / bookmarksfull readhyperlinks_with_text, bookmark_text
Commentsfull readcomment_details
Footnotes / endnotesfull readfootnotes
Content controls / form fieldsfull readcontent_controls
Stylesfull catalog + edit read catalog, not editabledistinct paragraph styles enumerated
Track changesfull accept/reject read authors + counts, no accept/rejectrevision_authors, writer.rs:331
Mail mergefull execute fields extracted, not executedmerge_fields
In-place editingfull WYSIWYG absentno inline edit; whole-document replace only
TOC / references / citationsfull absentno TOC/citation generation
Spell / grammar checkfull absent
Macros (VBA)full absent
ExportPDF PDF, HTML, Markdownwriter.pdf, to_html/to_markdown

PowerPoint → Impress

reads .pptx / .odp / .ppt / .fodp · engine: src/impress.rs

Feature groupPowerPointzoffice ImpressEvidence / note
Open formatspptx, ppt, odp pptx, odp, ppt, fodpOOXML + ODF + legacy binary read
Save formatsfull-fidelity pptx + odp minimal text-shapesave_pptx / save_odp
Slidesfull read + add blankadd_slide appends empty
Slide delete / reorderfull absentno delete_slide / reorder
Layouts / mastersfull + edit read, not editablelayout_names, master_count
Placeholdersfull readlayout_placeholders
Shapesfull + edit read geometry + text; positioned shapes written back on savex/y/w/h positioning read + written back (pptx + odp)
Text extractionfull readplain_text
Media (audio / video)full readembedded clips per slide, impress.rs:111
Tables on slidesfull readrows × columns
Speaker notesfull readper-slide notes
WordArtfull readtext + warp preset
Chartsfull read + render, no editcharts_render
Animationsfull read effect types, no editanimations, impress.rs:851
Transitionsfull read effect types, no edittransitions, impress.rs:827
SmartArt / diagramsfull stub — enumerated, not renderedimpress.rs:640
Master editingfull absent (read-only)
Slideshow / presenter viewfull absentno live present mode
ExportPDF PDF, HTML, Markdownimpress.pdf

Access → Base

reads .odb (embedded HSQLDB) · engine: src/base.rs

Feature groupAccesszoffice BaseEvidence / note
Open formatsaccdb, mdb .odb onlyno Access-native accdb/mdb reader
Table catalog + datafull read (embedded HSQLDB)base.rs:106; INSERT rows from HSQLDB script
SQL SELECT executionfull over embedded storequery(), base.rs:129
Schema / foreign keysfull readhsqldb_script → CREATE TABLE / FK
Query designerfull visual catalog + run, no designersaved queries listed
Forms / reportsfull designer catalog names onlybase.rs:115
External DSN / ODBCfull catalog visible, not queryableconnection URI parsed
Write (DDL / DML)full absentno table/query/form edit

zoffice extras (no direct MS app)

LibreOffice ships Draw and Math as standalone apps; Microsoft folds those roles into Publisher/Visio and Word's equation editor. zoffice implements both as read + export engines, plus two shell features Microsoft Office has no equivalent for.

CapabilityzofficeEvidence / note
Draw (vector graphics) read .odg + SVG export + save .odg with shape geometry, no in-place editshapes, layers, gradients, connectors; export_svg / save_odg (rect/ellipse/line/… with svg:x/y/w/h)
Math (formula editor) read StarMath → MathML, no editmath.render, to_starmath
Embedded terminal PTY shell in-appzpwr-embed-terminal; Office has none
Command palette ⌘K fzf-rankedapp.js:1568; beyond Office "Tell me"

Cross-cutting

FeatureMS OfficezofficeNote
PDF exportfull all appswkhtmltopdf backend
Localization (i18n)full 29 localeszpwr-i18n runtime
Print dialogfull absentPDF export only, no print UI
Save button (desktop app)full stubengine save() exists; no app Save wiring
Cloud co-authoringfull absent
Macros / scripting (VBA)full absent
Accessibility (screen reader)full unverifiednot audited in engine surface
Copilot / generative AIpresent absentMS Copilot state is past my knowledge cutoff — flagged, not independently verified

Reading this audit

The tables describe an embeddable document engine, not a shipped consumer suite — zoffice-core exists to be linked into Rust/Tauri hosts and over a C ABI, so its center of gravity is parsing + rendering + narrow lossless edits, with full authoring deliberately downstream. Where a row reads ◐ read-only, the data model for that feature is fully parsed and available to a host; what is missing is a mutate-and-serialize path that preserves it. The realistic near-term arc is Tier 2 (lossless patch) widening to cover more edit operations before Tier 3 (full save) becomes fidelity-preserving. Two claims here are not source-grounded and are marked as such: the estimated parity percentages (directional), and Microsoft Copilot's current state (past knowledge cutoff).