Coming from Excel
This is the same document you'll find inside Spredin under Help.
Spredin is built for Excel users moving to a Mac. Your muscle memory should mostly just work — this page maps what's identical, what moved, and what's different (usually: more powerful).
Your hands already know it#
- Fill handle — drag the little square at the selection's corner to extend a
series (
1, 2 → 3, 4…,Q1 → Q2,Jan → Feb, formulas shift refs like Excel). Double-click it to fill down to the neighbour column's extent. - Type-to-replace, F2-style editing (Enter/Tab commit and move, Esc cancels).
- Formulas —
=SUM(B2:B9),$A$1absolutes, cross-sheetSheet2!A1,'My Sheet'!A1:C9. Errors are the same tokens (#DIV/0!,#N/A,#VALUE!…). - Point mode, across sheets — start typing
=SUM(, then click another sheet's tab and drag over its cells: the reference (Sheet2!A1:A2) appears in the formula as you select, and Enter finishes the formula back on the cell you started from (Esc abandons it). Unbalanced(is auto-closed on commit, like Excel. - Dates — type
2024-01-15or1/15/2024and it becomes a real date (serial number + date format, like Excel):=A1+30, sorting and charts all work. - Merge, freeze panes, filters, sort, find & replace, pivot tables, conditional formatting, comments, number formats — all present (see the menus below).
Keyboard shortcuts (Windows → Mac)#
| You pressed on Windows | On the Mac | What it does |
|---|---|---|
Ctrl+C / X / V |
⌘C / ⌘X / ⌘V |
copy / cut / paste (paste-special in Edit menu) |
Ctrl+Z / Ctrl+Y |
⌘Z / ⇧⌘Z |
undo / redo |
Ctrl+F |
⌘F |
find & replace |
Ctrl+Arrow |
⌘Arrow |
jump to the edge of the data block |
Ctrl+Shift+Arrow |
⇧⌘Arrow |
extend selection to the edge |
Ctrl+A |
⌘A |
select the data region |
PageDown / PageUp |
same | move one screenful down / up (⌥ for sideways) |
Ctrl+PageDown / Ctrl+PageUp |
same, or ⌥→ / ⌥← |
next / previous sheet |
Home |
same | jump to column A of this row |
Ctrl+Home |
⌘Home |
jump to A1 |
Ctrl+End |
⌘End |
jump to the last cell of the used range |
Tab / Enter in a selection |
same | walk inside the selected block and wrap (Tab across, Enter down) |
F2 |
F2, double-click, or just start typing |
edit the active cell (Enter moves down, as in Excel) |
Alt menu keys |
⌘K |
the command palette — type what you want ("merge", "freeze", "pivot") |
Most Mac keyboards have no Page keys —
PageDownisfn+↓andPageUpisfn+↑, so switching sheets is⌃fn↓. That is why Excel for Mac also binds⌥→/⌥←, and so do we: on a laptop it is the one worth learning.
The fastest way to find anything: ⌘K and type a word. Every menu action is in the palette — including the ones that used to be menu-only (data validation, define name, insert comment, paste special, clear formats, split cell). The menu bar itself is reachable by Tab and Enter as well.
Where things live#
| In Excel | In Spredin |
|---|---|
| Home → formatting | The format toolbar (bold/borders/fills/number formats) |
| Data → Sort / Filter / Remove duplicates | Data menu (multi-key sort, AutoFilter, dedupe) |
| Insert → PivotTable | Data → Pivot table… (output goes to a new sheet) |
| Insert → Chart | Insert → Chart from selection — then ⚙ on the chart card for detailed options |
| View → Freeze Panes | Rows/Cols → Freeze (from selection / top row / first column) |
| Formulas → Trace Precedents | ⌘-click (or ⌘-right-click) a cell — precedents blue, dependents orange |
| Review → New Comment | Right-click → Comment (hover shows it) |
| Conditional Formatting | Data → Conditional formatting… (rules, color scales, data bars) |
| Text to Columns | Right-click → Split text to columns |
| Data → Get Data / Power Query | Tools → Python panel — see the honest note below |
| Data → Power Pivot / Data Model | not available — see below |
| Data → From Database | Data → Connect to database… — PostgreSQL, MySQL/MariaDB, SQLite. Read-only: Spredin runs a single SELECT/WITH and imports the result. It cannot write to your database, by design |
Opening your Excel files#
File → Open a .xlsx: every sheet arrives with values, formulas, number
formats, cell styling, merged cells, column/row sizes, frozen panes and comments.
Modern functions come through cleanly — Excel stores XLOOKUP/IFS/CONCAT/_xlfn. marker and sometimes an @ operator; Spredin strips both
so =XLOOKUP(…) evaluates immediately. A function Spredin doesn't have yet shows a
clear #NAME? (not a silent wrong number). Over 250 functions are
supported — nearly all of the ones Microsoft lists as most commonly used, the
main gap being the newest dynamic-array ones (see below).
We check the formula engine by opening real Excel workbooks and comparing every formula against the result Excel itself last computed and saved in the file. It is an ongoing process rather than a finished one, and it is how most of the differences that remain get found.
Excel charts/pivots don't import — rebuild them with Spredin's own (they stay live). Macros never run (by design; see below). Full fidelity matrix: Help → File formats.
Saving: keep working files in .sprd (Spredin's open, human-readable format —
preserves everything, gzipped inside so it is ~80% smaller). File → Export writes styled,
multi-sheet .xlsx back for your Excel colleagues.
VBA → Python#
Spredin's automation language is Python (the Tools → Python panel), not VBA:
- The
sheetAPI is pandas-friendly:df = sheet.read('A1:F100'),sheet.write(df2, 'H1'),sheet.chart('A1:C10', 'bar', title='Sales'), cross-sheet viasheet.book('Sheet2'). import pandas / numpy / matplotlib / scikit-learn …just work (Pyodide).- The AI assistant in the panel writes scripts from a plain-English prompt — it knows this API. Editor has autocomplete, hover help and lint.
- Reference: Help → Python guide and API reference.
Your .xlsm macros do not run — Spredin never executes anything inside an
opened file (a security feature, not a gap).
Same as Excel, and worth knowing#
Sorting a range that contains merged cells is refused. The status bar names the merge, so you know which one. Unmerge it, sort, then merge again.
Excel refuses this too, for the same reason. Sorting moves the values, but a
merge is a fixed rectangle that stays where it is — so afterwards the merged
label would sit over rows it never described, and the value hidden underneath
would be invisible, because a merge only ever shows its top-left cell. You would
have no way to see that it had happened. A script gets the same protection:
sheet.sort(...) stops and tells you, rather than quietly rearranging the data.
Different on purpose#
- Errors explain themselves — hover an error cell:
#N/A — VLOOKUP did not find "acme-x" in the table's first column.The cell still shows the canonical token, soIFERROR/ISNAbehave exactly like Excel. - XLOOKUP, SUMIFS, IFS, TEXTJOIN, LET, FILTER, UNIQUE, SORT, SEQUENCE,
SUBTOTAL, AGGREGATE are covered, plus finance (XIRR, XNPV, IRR, MIRR, NPER,
RATE) and the matrix set (MMULT, MINVERSE, TRANSPOSE, LINEST, TREND). Full
list: type
=and browse the autocomplete. - Charts are ECharts-powered — 19 types, editable via the ⚙ panel, and an "Advanced (JSON)" escape hatch for anything the UI doesn't expose.
- The file format is open —
.sprdis documented JSON you can read, diff and generate. - We do not rewrite what you type.
SEPT2staysSEPT2,007keeps its leading zeros, and a 19-digit account number keeps every digit. Excel turns the first into a date, drops the zeros from the second and rounds the third away into scientific notation — the single most-criticised thing about it. Currency, percentages, thousands separators and unambiguous dates are still converted, on typing, pasting and CSV import alike. See File formats. - It tells you why a workbook is slow. Tools → Workbook health reports used ranges stretched by a stray cell, volatile formulas, conditional formats covering millions of cells, formatting far in excess of the data, and every formula that evaluates to an error — with the number, the sheet, an example address and what to do about each. Excel's answer to "why is this slow" is a support article telling you to change your workbook; this tells you which part.
- Past Excel's size limits. Rows grow with your data (Excel stops at
1,048,576) and columns reach
ZZZZ— 475,254 of them, against Excel's 16,384. Undo is 200 steps, not 100, and running a Python script does not wipe the undo stack the way a VBA macro does.
Not there yet (honesty section)#
Kept deliberately blunt, because finding these out mid-task is worse than reading them here. Everything below is verified against the current build.
No workaround exists today:
- Printing / page setup / PDF. There is no print path at all — no print area, margins, orientation, headers/footers, repeat-title-rows or Save-as-PDF, and ⌘P is unbound. If your month-end ends in a printed or PDF'd page, that step has to happen in Excel for now.
- No autosave. Spredin warns before you close unsaved work and keeps a crash-recovery snapshot every 20 seconds (offered back to you on the next launch), but the file itself is only written when you save. Save early: ⌘S, or File → Save workbook. Snapshots are compressed, so recovery covers workbooks up to 1,000,000 cells — past that the pause it would cost every 20 seconds is worse than the protection is worth, and the status bar says Not autosaved for as long as that is true rather than letting you assume you are covered.
- Format Painter, and clearing formats. The painter doesn't exist. Clearing does, as of now: Edit → Clear formats (Delete still clears contents only, as in Excel).
Round-trip caveat — smaller again. .xlsx export now carries values,
formulas (with their last computed result, so a reader without a formula engine
still sees the right numbers), cell styling, merged cells, frozen panes, column
widths / row heights, comments, defined names, hidden sheets and data
validation rules. One thing import reads but export still drops:
conditional formatting (exported as plain fills, not live rules). Excel
charts never import at all. If a workbook's colour rules matter, keep the
.sprd file as your master copy.
Power Query and Power Pivot have no equivalent — Python is the answer, and it is a different shape. Worth reading properly, because these are the two names people ask about first.
- If you are on Excel for Mac today, you do not have Power Pivot either — Microsoft has never shipped the Data Model on the Mac, and Power Query's interface there is partial.
- What Python replaces well: every transformation Power Query performs — filter, merge with any join type, append, unpivot, group, split, fill down, remove duplicates, change type — usually in less typing, over pandas, with the whole of Python available when a step needs real logic. Plus our read-only database connector for the "get data" half.
- What it does NOT replace, honestly:
- A refreshable pipeline. Power Query saves its steps in the workbook and
re-runs them when you press Refresh. Our scripts are saved in the
.sprdfile, but nothing yet records which sheet came from which script, and nothing re-runs it for you. - A step list you can audit. Power Query shows named steps you can click, reorder and edit in the middle. A script is a script.
- Measures with filter context — Power Pivot's genuinely different idea,
where one definition (
Total Sales) answers every question you drag it into. In Python you write the aggregation per question.
- A refreshable pipeline. Power Query saves its steps in the workbook and
re-runs them when you press Refresh. Our scripts are saved in the
Missing features: hyperlinks, cell/sheet protection, Goal Seek and the rest of what-if, subtotal outlines, Flash Fill, rich text runs inside one cell, per-side borders, and Excel-chart import. Sheet tabs can't be dragged to reorder or duplicated yet.
One that needs a sentence rather than a bullet — dynamic arrays. The
functions are all there: FILTER, UNIQUE, SORT, SORTBY, SEQUENCE,
TRANSPOSE, LINEST, TREND. What is not there yet is spilling — a
multi-cell result filling the cells below and to the right on its own. Use them
the pre-365 way, wrapped in something that consumes an array:
=SUM(FILTER(C:C,B:B="East")), =INDEX(SORT(A2:B99,2),1,1). A bare
=UNIQUE(A:A) in one cell shows its first element rather than spilling.
Structured table references (Table1[[#This Row],[Amount]]) do work, and
import correctly from .xlsx; what is missing is the Ctrl+T command to create a
table in Spredin.
Filling a long column without dragging#
The Excel habit works here, in two keystrokes and no mouse:
- Type the formula in the first row of the column (or the last — see below).
- ⌘⇧↓ — extends the selection to the bottom of the data block in one press. (⌘⇧↑ goes the other way; ⌘↓ without Shift just jumps there.)
- ⌘D — Fill Down. The formula is copied over the whole selection with its references shifted per row.
If the formula is on the last row instead, select upward with ⌘⇧↑ and press ⌘⇧D for Fill Up. Excel has Fill Up in Home → Fill but gives it no shortcut at all (the chord is Alt+H,F,I,U); ⇧ over the fill key is ours. ⌘R and ⌘⇧R are Fill Right and Fill Left. All four are in Edit → Fill too.
Double-clicking the fill handle still works, and still stops at the neighbouring column's last row.
$ anchors: ⌘T (not F4 — macOS takes that key)#
While editing a formula — in the cell or in the formula bar — put the caret
on a reference and press ⌘T to cycle A1 → $A$1 → A$1 → $A1 → A1.
Use ⌘T, not F4. This is the one place your Windows muscle memory can't follow you, and it isn't Spredin's doing: by default macOS gives the top row to the hardware functions, so pressing F4 fires Spotlight/Launchpad and the key never reaches any app. Excel for Mac hit the same wall and binds ⌘T — we use the same chord, so anything written for Excel-on-Mac applies here.
If you want F4 itself, either press fn+F4, or turn on System Settings →
Keyboard → "Use F1, F2, etc. keys as standard function keys". Both work.
Ctrl+T also works everywhere and is the one to use in the browser version,
where the browser keeps ⌘T for opening a tab.
Two things it does that save real time: the caret anywhere inside B2:D50
anchors both ends together, and selecting a stretch of the formula anchors
every reference in it at once. Text inside quotes is left alone, so a label
like "Q1" never gets mangled.
Keyboard gaps. Still unbound: Ctrl+;, Ctrl+1, Ctrl+P, F9.
One platform note, and it has a workaround now: cancel a cell edit with ⌘. Not Escape. On the Mac desktop build the webview swallows Escape completely — it never reaches the app at all, so a typed-over formula left you stuck in an open editor with the replacement still in it. ⌘. (macOS's own cancel chord) is bound to Edit → Cancel cell edit and discards the edit properly. Escape still works in the browser build. If you do commit something by mistake, ⌘Z undoes it.
Already shipped (this list used to say otherwise): named ranges, data validation dropdowns, dynamic pivot tables, conditional formatting, AutoFilter with conditions, freeze panes, multi-key sort, paste-special, and over 250 functions.
Numbers too wide for their column show #####, as in Excel — widen the
column or reduce the decimals to see the value. Spredin will never show you part
of a number.
A formula that returns several values shows the first one, with a corner
mark. =UNIQUE(A1:A9) puts the first unique value in the cell and flags it,
because spilling into the neighbouring cells is not implemented yet. That
matches what Excel's own anchor cell holds; what is missing is the rest. Use
them wrapped — =SUM(FILTER(…)), =INDEX(SORT(…),1,1), =COUNTA(UNIQUE(…)).
All of these are tracked — tell us which one blocks you, via Help → Send feedback.