A fast, mobile-first, single-file spreadsheet viewer. Drag & drop an Excel or OpenDocument workbook and browse every sheet as a clean table — one tap flips to a CSV source view. It's a viewer, not an editor — no toolbars, no accounts, no uploads. Everything runs locally in your browser.
🔗 Live: https://sheets-viewer.us/
Part of the File Viewer family — HTML, Markdown, ePUB, PDF, Data, DOCX, and Sheets each have their own dedicated viewer. Use the ☰ menu in the header to jump between them.
- 📑 Every sheet, as a table — sheet tabs switch between worksheets; numbers, dates, and text render as formatted values with a sticky header row.
</>Source view — one tap shows the active sheet as syntax-highlighted CSV (quoted-field aware).- 🔀 Drop to replace — drop a new workbook while one is open and it replaces the current view.
- ☰ Family menu — a hamburger flyout links to every viewer.
- 🫥 Distraction-free header — auto-hides while you read, collapsing to a thin handle; hover, tap, or scroll up to bring it back.
- ✅ File-type checking — only spreadsheet types are accepted; other files are politely declined so you land in the right viewer.
- 🎨 Pick any background color — text and borders adapt for contrast (light and dark), remembered across visits.
- 🪶 One file, no build —
index.htmlis self-contained and works offline, even fromfile://. - 📊 Privacy-friendly analytics — self-hosted, cookieless Plausible; your files never leave your device.
.xlsx .xlsm .xlsb .xls .xlt .xltx .xltm .xlam .ods .fods
.dif .prn .dbf .numbers .xlml .wk1 .wk3 .et
CSV and TSV are handled by the sibling Data Viewer (which also does JSON, YAML, and XML), so they're intentionally not duplicated here.
Just open it. Download index.html, double-click it — no
server, no build, no internet needed.
python3 -m http.server 8080 # then open http://localhost:8080Connect the repo (Workers & Pages → Create → Pages → Connect to Git),
framework preset None, build command blank, output directory /. The
_headers file applies a strict CSP automatically. Add the custom
domain sheets-viewer.us under the project's Custom domains tab.
Everything is in index.html — app logic plus two inline libraries,
so parsing and highlighting work offline:
- SheetJS (Community Edition)
v0.18.5(Apache-2.0) — reads.xlsx,.xls,.ods, and many more spreadsheet formats. - highlight.js
v11.9.0(BSD-3-Clause) — highlights the CSV source view.
Tables are built as escaped DOM (never innerHTML of untrusted cell text),
so the viewer's CSP stays strict (default-src 'none', no external assets).
Note: this is a viewer — it shows values + structure. Rich cell styling, colors, merged-cell formatting, and charts aren't rendered; formulas show their last-saved computed values.
| Component | Version | License |
|---|---|---|
| SheetJS (xlsx) | 0.18.5 | Apache-2.0 |
| highlight.js | 11.9.0 | BSD-3-Clause |
| JetBrains Mono | subset | OFL-1.1 |
The file-type icon (favicon and header icon) is from vscode-icons (MIT). Analytics by Plausible.
MIT © 2026 Michal Ferber, aka TechGuyWithABeard. Bundled
components retain their own licenses — see LICENSE and
Credits.