Text rotation
A cell's text can be rotated to a Sheets preset (Tilt up 45°, Tilt down -45°, Rotate up 90°, Rotate down -90°) or a custom angle, from either the toolbar's Text rotation popover or Format → Text rotation; the grid draws the rotated text with a real canvas rotate transform, and an explicit rotation is a per-cell presentation attribute — it survives value/formula edits, undoes/redoes like any edit, and resets with Clear formatting.
What it does
Select a cell or range and open the toolbar's Text rotation popover (or Format → Text rotation) to rotate the cell's text to one of Sheets' four angle presets — Tilt up (45°), Tilt down (-45°), Rotate up (90°), Rotate down (-90°) — or type a custom angle from -90° to 90°. None clears the rotation back to the default (unrotated).
A positive angle pivots the text at the cell's bottom-left corner and reads
counter-clockwise (ascending for a tilt, bottom-to-top for a 90° rotation); a
negative angle pivots at the top-left and reads clockwise. Rotation is a
presentation attribute, separate from the cell's value: rotating =A1+B1
angles the drawn number without touching the formula. It is per-cell, survives
value edits, undoes/redoes like any other edit, and resets with Clear
formatting.
Not built in this slice (see the oracle brief for the full reasoning):
- Stack vertically — a distinct one-character-per-line layout Sheets also
offers, not an angle, so it doesn't fit the
rotation: numberfield this issue asked for. - Row-height growth for a rotated cell — Sheets visibly grows the row to fit the rotated bounding box; Studio's rotated text instead clips at the cell's existing rect, the same fallback any other overflowing cell gets.
Verified behavior
Matches Google Sheets: In Google Sheets, the toolbar's "Text rotation" popover offers six presets (None, Tilt up, Tilt down, Stack vertically, Rotate up, Rotate down) plus a free custom-angle input; Tilt up = 45°, Tilt down = -45°, Rotate up = 90°, Rotate down = -90° (verified live — features/format-rotation.oracle.md — by reading the custom-angle dropdown's highlighted value while each preset was active, never self-confirmed). A positive angle pivots the text at the cell's bottom-left corner and reads counter-clockwise (ascending left-to-right for a tilt, bottom-to-top for a 90° rotation); a negative angle pivots at the top-left and reads clockwise. Sheets grows the row to fit the rotated bounding box. "Stack vertically" is a distinct layout (one character per line, no angled baseline at all) — not a point on the angle continuum — and is out of scope for this slice; so is row-height growth for rotation. Rotation is a per-cell presentation attribute like every other CellFormat field: it never touches the value or formula, and undoes/redoes with the command log.
Tilt up sets a 45° rotation (Format menu)
Given
- A1 =
hello
When I click A1, then click menu item format.rotateTiltUp
Then
- A1 is rotation=45
Tilt up sets a 45° rotation (toolbar) — the SAME seam as the Format menu, driven end to end
Given
- A1 =
hello
When I click A1, then open the text-rotation dropdown, then pick tiltUp from the text-rotation dropdown
Then
- A1 is rotation=45
Rotate down sets a -90° rotation and is presentation only — value/formula untouched
Given
- A1 =
=2+3
When I click A1, then click menu item format.rotateDown
Then
- A1 shows
5 - A1 has formula
=2+3 - A1 is rotation=-90
rotation survives a value edit
Given
- A1 =
x
When I click A1, then click menu item format.rotateTiltDown, then type changed into A1
Then
- A1 shows
changed - A1 is rotation=-45
rotation undoes and redoes with the command log
Given
- A1 =
x
When I click A1, then click menu item format.rotateUp, then undo, then redo
Then
- A1 is rotation=90
Clear formatting resets rotation back to none
Given
- A1 =
x
When I click A1, then click menu item format.rotateTiltUp, then click menu item format.clearFormatting
Then
- A1 is rotation=false
the None preset explicitly clears an existing rotation
Given
- A1 =
x
When I click A1, then click menu item format.rotateTiltUp, then click menu item format.rotateNone
Then
- A1 is rotation=false
rotating a wide cell's text grows its row, matching Sheets
Given
- A1 =
a fairly long piece of rotated text
When I click A1, then click menu item format.rotateTiltUp
Then
Explain a cell's computed result
Right-clicking a cell offers "Explain", which opens a modal, centered stage playing back an animated node-graph of how the cell's value was computed — leaf inputs at the bottom, operations flowing up, the result at the top, each step lighting its node/edges and narrating what happened.
Underline a cell
Ctrl+U (or the toolbar Underline button, or Format > Text > Underline) toggles underline on the selection.