Documents & spreadsheets

Right-click → Office → Document drops a rich-text document, and → Office → Spreadsheet drops a spreadsheet. Both come with a full editing UI — toolbar, formula bar, and the rest — mounted right on the canvas.

A rich-text document and a spreadsheet, each with its full editing toolbar, mounted side by side on the board
A document and a spreadsheet, edited inline on the canvas.

On the board

Each editor is wrapped in the same chrome as code cells:

  • A draggable header (the title bar), a bottom-right resize grip, and an × to remove it.
  • It pans and zooms with the canvas like every other overlay.
  • Edits save automatically through the same as-you-go mechanism as everything else — there’s no manual save. The content is stored as the editor’s own snapshot in the board, and restored by rebuilding the workbook or document from it. See Persistence.

Import and export

Both kinds import and export entirely client-side — there’s no server involved. Each editor’s header has ⭱ import and ⭳ export buttons:

  • Spreadsheets ↔ .xlsx — import replaces the sheet’s contents; export downloads an .xlsx.
  • Documents ↔ .docx — round-trips basic formatting: bold, italic, underline, strikethrough, headings (h1–h6), and bullet / ordered lists. Tables, images, colors, and fine spacing don’t survive the round-trip.

Spreadsheets as code-cell data

Every spreadsheet has its own orange +. Click it to spawn a code cell that already reads the sheet, or drag from it onto an existing cell to link the sheet in as a data source. Linked sheets are handed to Python through an auto-injected SHEETS dict, re-materialized on every run so the kernel always sees the current contents.