SheetHorse is wat CSVHorse is in zijn full variant: dezelfde gratis, server-vrije browser-werkbank, maar uitgebreid met multi-tabel ondersteuning, Excel-roundtrip met native cell-styles, een relaties-tabblad voor foreign-keys, SQL-joins over al je sheets, en een multi-tabel CSV-format waarin tabellen, relaties én query-output allemaal in één bestand passen via metadata-markers.

Open SheetHorse direct: cpaglebbeek.github.io/CSVHorse/sheethorse.

Het idee

Bij iCt Horse helpen we organisaties data-werk pragmatisch maken. Een terugkerend patroon: mensen hebben relationele data — klanten, orders, producten — maar geen DBMS, geen tijd om Power BI in te richten, en geen wens om hun data naar een SaaS te uploaden. Tegelijk willen ze: opmaak behouden, queries kunnen draaien, en de hele zaak als één bestand kunnen doorgeven.

SheetHorse pakt die niche: een browser-native CSV/Excel-werkbank met een virtuele relationele laag erbovenop. Geen server, geen account, geen install. Alles in één HTML-bestand — je hele tool past op een USB-stick.

Features (live nu — v0.6.0.2-Hanoverian)

📁 CSV import & lege start

Alles wat CSVHorse heeft — drag-drop CSV, dialect-auto-detect, lege CSV starten via dialog — werkt onveranderd in SheetHorse.

📂 Excel (.xlsx) import

Sleep een .xlsx op de pagina → alle tabbladen worden geladen, met cell-opmaak gelift naar interne style-objecten. Ook eventuele __style_*-kolommen worden mee gelift (Excel-styles winnen bij conflict). Embedded objects (charts/images) worden gedetecteerd en gemeld — niet geïmporteerd.

💾 Excel-roundtrip met opmaak

Export naar .xlsx met native Excel cell-styles: bold/italic/underline/strikethrough/kleur/fill/fontSize/alignment per cel. Bidirectionele mapping — wat eruit gaat komt terug in. Vendor: xlsx-populate (MIT).

📋 Multi-sheet tab-strip

Tabblad-strip onderaan, Excel-stijl. Klikken = wisselen. Per-sheet state: undo-stack, filter, selectie en zoek-matches blijven per tabblad behouden. Sheet-naam bewerkbaar via dubbelklik. + Nieuw werkblad. × Verwijderen.

✏ Header- & cell-edit

Dubbelklik op een kolom-header = bewerk de naam (incl. uniek-check). Cell-edit zoals in CSVHorse, met onbeperkte undo per sheet. Excel sheet-naam-validatie (1–31 chars, geen \:/?*[]).

⨁ Rij- & kolom-CRUD

Insert/Remove voor zowel rijen als kolommen, undo-baar via Insert/RemoveRowCommand en Insert/RemoveColCommand. Style-shift wordt automatisch meegedaan zodat opmaak op de juiste cel blijft staan na een insert/delete.

≡ SQL-builder met JOINs

Volledige SQL via AlaSQL met visuele query-builder: FROM-dropdown over alle sheets, JOIN-rij-builder met auto-suggesties uit het relaties-tabblad. SQL-result als read-only view onafhankelijk van source-data. Filter en SQL exclusief.

🔗 Relaties-tabblad (FK-CRUD)

Apart tabblad waar je foreign-key-relaties CRUD'd tussen je sheets: (from-table, from-col, to-table, to-col, type). Auto-suggesties op basis van kolom-naam-match. Relaties voeden de JOIN-suggesties in de SQL-builder.

B I U Opmaak per cel

Acht style-attributen per cel: bold/italic/underline/strike/kleur/background/font-size/alignment. Per sheet bewaard. Bij Excel-export omgezet naar native cell-styles, bij CSV-export naar __style_*-kolommen (toggleable).

📄 Multi-tabel CSV-met-metadata

Sla meerdere tabellen, relaties én query-output op in één CSV-bestand via marker-conventie: # TABLE, # RELATIONS, # QUERY, # QUERY_OUTPUT. Alle tooling die CSV leest blijft werken — SheetHorse herkent de markers en bouwt het hele workbook terug.

🔍 Zoek/vervang & autosave

Regex, case-toggle, scope-keuze. Vervang-alle als 1 undo-step. Throttled autosave naar localStorage per session, met restore-banner bij heropenen.

Gepland (volgt de komende releases)

⚡ Virtual scrolling v0.7.0

Virtual-scroll-rendering zodat SheetHorse comfortabel doorschaalt naar 100 k+ rijen per sheet zonder DOM-bloat. CSVHorse-architectuur is hierop voorbereid; in SheetHorse moet de multi-sheet state-switcher mee.

📝 Query-output als sheet v0.8.0

SQL-resultaat én query opslaan als een speciaal tabblad (_query-sheet), zodat dashboards in Excel/CSV bewaard blijven — ook na een roundtrip door SheetHorse heen.

🌐 Deploy naar icthorse.nl v1.0.0

Stable-release met eigen URL onder icthorse.nl/sheethorse/ naast de GitHub Pages-build. Publieke launch en handmatige QA.

Roadmap

v0.0.1HaflingerFork van CSVHorse v0.2.0.2 + naam-shift + skeleton-docs (LIVE)
v0.1.0LipizzanerExcel (.xlsx) import + export met opmaak-mapping (LIVE)
v0.1.0.1LipizzanerCherry-pick header-edit van CSVHorse main (LIVE)
v0.2.0AndalusianMulti-sheet runtime: tab-strip + per-sheet state + multi-sheet XLSX I/O (LIVE)
v0.3.0TrakehnerRelaties-tabblad met FK-CRUD en cardinaliteit (LIVE)
v0.4.0Akhal-TekeSQL met joins over multi-sheet (LIVE)
v0.5.0KnabstrupperCSV-met-metadata-format: multi-tabel via # TABLE/# RELATIONS/# QUERY-markers (LIVE)
v0.6.0HanoverianRij- & kolom-CRUD met style-shift + SQLBuilder FROM-dropdown + JOIN-builder met auto-suggest uit relaties (LIVE)
v0.6.0.1HanoverianXLSX-import lift __style_*-kolommen samen met native Excel cell-styles (LIVE)
v0.6.0.2HanoverianWis SQL-knop leegt nu ook de textarea (LIVE)
v0.7.0tbdVirtual scrolling voor 100 k+ rijen per sheet
v0.8.0tbdQuery-output als bewaarbaar _query-tabblad (roundtrip)
v1.0.0LusitanoStable public release + deploy icthorse.nl/sheethorse/

Architectuur

SheetHorse deelt zijn fundament met CSVHorse: vanilla JavaScript, geen framework, alle vendor-libraries inline opgenomen met SHA-256-hash gepind. Bovenop CSVHorse zit één extra vendored library: xlsx-populate 1.21.0 (~640 KB minified, MIT) voor de Excel-roundtrip. De DataStore is gerefactored naar een multi-sheet structuur waarin elke sheet een eigen state-snapshot heeft (rows, cols, styles, dialect, undo-stack, filter-state, selectie, search-state).

De volledige architectuur (componenten, data-flow, branch-split, roadmap) is interactief te bekijken in de SheetHorse architectuurviewer — ArchiMate-stijl, deterministisch, met JSON/.archimate/SVG-export voor import in Archi-tool of ArchiMate-compatibele EA-tools.

Technische specificaties

Single-file deliverableéén index.html (~1.34 MB minified, incl. PapaParse + AlaSQL + xlsx-populate)
BundleVanilla JS · PapaParse 5.4.1 · AlaSQL 4.17.3 · xlsx-populate 1.21.0 (alle MIT)
Browser-targetChrome / Firefox / Safari / Edge laatste 2 versies
Schaal per sheet~5 000 rijen comfortabel (virtual scrolling roadmap)
Multi-sheet limitGeen harde limiet — afhankelijk van browser-memory (typisch 50+ sheets prima)
Privacy100% client-side — geen netwerk, geen tracking, geen accounts
StorageBrowser localStorage per session (max ~5 MB) — optioneel
LicentieAGPL-3.0 (publiek open-source)
Branchsheethorse in cpaglebbeek/CSVHorse
Codenaam-themaPaardenrassen (huidige release: v0.6.0.2-Hanoverian)

Wanneer kies je CSVHorse?

CSVHorse is de light variant — één tabel CSV, geen Excel-roundtrip, geen multi-sheet. Kies CSVHorse als je:
  • simpel een CSV wilt openen, queryen, bewerken en exporteren;
  • geen Excel-bestanden hoeft te lezen of schrijven;
  • een kleinere bundel wilt (~660 KB vs 1.34 MB) en minder "cognitive load".
Lees de CSVHorse-lancering: de light versie als CSV-werkbank →

Branch-strategie & bug-management

CSVHorse en SheetHorse delen dezelfde GitHub-repository in twee branches: main (CSVHorse-light, stabiel) en sheethorse (SheetHorse-full, actief). Bugs zijn vaak shared (DOM-handling, vendor-libraries). Onze interne /bugcheck-procedure scant beide branches bij elke audit. Een bug-fix op de gedeelde basis wordt naar beide branches gepushed.

De deployment is volledig geautomatiseerd via GitHub Actions: een push naar main of sheethorse triggert een gecombineerde Pages-build. De landing-page op cpaglebbeek.github.io/CSVHorse/landing.html toont beide producten naast elkaar.

Aan de slag


#Excel #XLSX #SQL #MultiSheet #OpenSource #DataTools #BrowserNative #ClientSide #RelationalDB #AGPL #SingleFile #PrivacyByDesign #iCtHorse #DataAnalyse