Feature

Round-trip fidelity: saving without rewriting the whole file

Native Sheets keeps the raw bytes of every part of an .xlsx package and regenerates only the parts it models, so charts, pivot caches and themes survive a save.

An .xlsx package usually contains more than the cells you can see. Native Sheets treats the parts it does not model as data to carry rather than data to discard.

How it works

The reader holds on to the raw bytes of every part it opened, in a PackageParts structure that sits alongside the parsed workbook. On save, the writer regenerates only the parts it understands and copies the rest through unchanged:

Regenerated on saveCopied through byte for byte
workbook.xmlThemes
xl/worksheets/sheetN.xmlTables
sharedStrings.xmlPivot caches
[Content_Types].xmlCharts and drawings
The workbook relationshipsConditional formatting, printer settings

What has been measured

On the project's sample workbook, a 1.6 MB four-sheet tracker with 20,739 cells and 4,530 formulas, a read-write-read cycle produced 20,739 identical cells out of 20,739, and 4,530 of 4,530 formulas matched the values the file itself had cached. The saved file was also opened with openpyxl, an unrelated implementation, which reported no differences in values, styles, tables, column widths or frozen panes.

The same check runs against any workbook you point it at, which is the only way to know about yours:

xcodebuild build-for-testing -scheme "Native Sheets" -derivedDataPath build/DerivedData
XLSX_CHECK_SOURCE=~/book.xlsx xcrun xctest -XCTest XLSXKitTests.ExternalWorkbookTests \
  build/DerivedData/Build/Products/Debug/XLSXKitTests.xctest

Prerequisites and limits

  • macOS 14 or later, and Xcode 26 or newer to build the app.
  • Preserved is not editable. Charts, images, pivot tables and conditional formatting are carried through a save but are neither displayed nor edited.
  • A pivot cache is a snapshot taken when the workbook was last saved by an application that models pivot tables. Preserving it does not refresh it.

If you want to see which parts your own files carry before deciding anything, this article walks through comparing a workbook before and after a save.

Open a workbook in the browser