CSV Editor online

Code

Export

My documents

Click a document to open it. They are stored only in this browser - nothing is uploaded. Clearing the browser's site data removes them, so download the ones you want to keep.

AI Assistant

Any AI can work with you - ChatGPT, Claude, Gemini, Copilot.

  1. Click Copy prompt.
  2. Paste it into your AI and say what it should do with the table.
The AI should

The table travels in the link after the “#”, which no server sees. What you paste into your AI is handled by its provider.

Save to your server

The editor can send each saved version to your own server (a webhook), so your work is kept where you want it. Nothing is sent until you enter an address here.

What your server receives

A POST request with JSON (your server must allow CORS from https://csv.giit.ch):

{ "editor": "csv", "event": "save", "id": "…", "name": "Products",
  "content": "SKU,Product,Price\nA-100,Notebook,4.50\n",
  "updated": "2026-01-15T09:30:00.000Z" }
Embed the editor in your website
<iframe src="https://csv.giit.ch/?embed=1" style="width:100%;height:80vh;border:0"></iframe>
<script>
const frame = document.querySelector('iframe');
addEventListener('message', e => {
  if (e.origin !== 'https://csv.giit.ch' || e.source !== frame.contentWindow) return;
  if (e.data.type === 'csveditor:ready')
    frame.contentWindow.postMessage({ type: 'csveditor:load', name: 'Products',
      content: 'SKU,Product,Price\nA-100,Notebook,4.50\n' }, 'https://csv.giit.ch');
  if (e.data.type === 'csveditor:save') saveOnYourServer(e.data.content);
});
</script>

Also possible: ?src=<URL of a .csv file> opens a file, &webhook=<URL> saves this document there. The editor can also open in a window of its own (?embed=window), and your page can hand it its own AI prompt and a session key so the AI sends its result to your server (csveditor:ai, csveditor:key-request) - see "Use the editor on your own website" below the editor. Details are in llms.txt.

Help

How it works

  1. Open a CSV file, drop it into the window, or start with New. The raw text is on the left, the table in the middle.
  2. Edit cells in the table like in a spreadsheet: type, or press Enter or F2, or double-click a cell. Enter or Tab keeps the value, Escape cancels. The change goes into the CSV text right at that field - quotes only where needed, the line endings stay - and is one step for Undo.
  3. Copy and paste ranges between the table and Excel, LibreOffice or Google Sheets with Ctrl+C and Ctrl+V. Type into the row marked + to add a row.
  4. A click in the table puts the code's cursor on that field; the cursor in the code selects its cell.
  5. Sort with the arrows in the column heads and filter above the table: that only changes the view. Sort the data puts the rows of the file into that order.
  6. Format on the right sets how the text is read (separator, quote, header row) and converts it; Column shows what a column holds; Insert adds, deletes and moves rows and columns and cleans up.
  7. Problems (rows with another number of fields, unclosed quotes, empty or repeated header names) are listed above the code - click one to go there.
  8. Export makes an Excel workbook, JSON, Markdown, HTML, TSV or CSV with another separator. Download .csv saves the text as it is.

Keyboard shortcuts in the table

← → ↑ ↓, Shift + arrows
Move, select a range
Enter / F2 / typing
Edit the cell (typing replaces its value)
Alt + Enter
A line break inside the cell
Tab / Shift + Tab
Next / previous cell
Delete
Empty the selected cells
Ctrl + C / X / V
Copy / cut / paste (tab-separated, as spreadsheets use it)
Ctrl + A
Select the whole table
Ctrl + F
Filter the rows
Ctrl + Z / Y
Undo / redo
Ctrl + S / E
Save (download .csv, or to your server) / export
Ctrl + O
My documents
Ctrl + Enter in the code
Go to the cursor's cell in the table

CSV-bestanden online bewerken, als tabel en als tekst

De CSV-editor toont de ruwe CSV en de tabel naast elkaar. Bewerk een cel in de tabel en de editor wijzigt precies dat veld in de tekst - de andere aanhalingstekens, het scheidingsteken en de regeleinden blijven zoals ze waren. Een klik in de tabel toont het veld in de tekst, en de cursor in de tekst toont zijn cel. Zo herstel je snel exports uit webshops, banken en databases, schoon je adreslijsten op of bereid je gegevens voor op een import.

Alles draait in je browser. Bestanden worden niet geüpload, er is geen registratie en geen reclame.

Wat de editor kan

Zoals een spreadsheet

Typ in cellen, ga verder met de pijltoetsen en Tab, kopieer en plak bereiken van en naar Excel, LibreOffice of Google Sheets, voeg rijen en kolommen toe, verwijder en verplaats ze.

Elke CSV

Komma, puntkomma, tab of verticale streep als scheidingsteken, automatisch herkend; met of zonder koprij; UTF-8 met of zonder BOM en Windows-1252; Windows- en Unix-regeleinden blijven behouden.

Vind wat kapot is

Rijen met een ander aantal velden, aanhalingstekens die nooit worden gesloten, lege en herhaalde kolomnamen - vermeld met hun regel, één klik verwijderd.

Sorteren, filteren, beter bekijken

Sorteer en filter de weergave zonder het bestand aan te raken, of sorteer de gegevens zelf. Het kolompaneel toont het soort waarden, lege en verschillende waarden, som en gemiddelde.

Grote bestanden

De tabel tekent alleen de rijen die je ziet: bestanden met 100 000 rijen blijven snel om te scrollen, te filteren en te bewerken.

Exporteren

Excel-werkmap (XLSX), JSON-, Markdown- en HTML-tabellen, TSV, of CSV met een ander scheidingsteken en een andere codering - met bescherming tegen spreadsheetformules.

Hoe het werkt

  1. Openen - zet een CSV-bestand in het venster neer, open het met "Bestand openen…", of begin met een sjabloon onder "Nieuw".
  2. Bewerken - wijzig cellen in de tabel of de tekst links; beide volgen elkaar. Gebruik "Invoegen" voor rijen en kolommen, "Formaat" voor het scheidingsteken.
  3. Opslaan - download de CSV zoals hij is, of exporteer hem als XLSX, JSON, Markdown of HTML.

De editor op je eigen website gebruiken

Elke https-pagina (en localhost) kan de editor insluiten met een <iframe> en ?embed=1 - geen registratie, geen sleutel. Ingesloten verbergt de editor deze tekst en toont hij een knop Opslaan. Er zijn twee manieren om de tabel erin en eruit te krijgen.

1. Een bestand openen via een link, opslaan op je server

src= opent een bestand (je server moet CORS toestaan), webhook= zorgt dat "Opslaan" (Ctrl+S) het document naar dat adres stuurt. Voeg &token=… toe voor een header Authorization: Bearer … en &auto om na elke wijziging op te slaan.

<iframe src="https://csv.giit.ch/?embed=1&src=https://your-site.com/data/products.csv&webhook=https://your-site.com/save.php"
        allow="clipboard-write" style="width:100%;height:800px;border:0"></iframe>

De webhook krijgt een POST met JSON { editor: "csv", event: "save", id, name, content, updated }. Een klein PHP-script dat het opslaat:

<?php
header('Access-Control-Allow-Origin: https://csv.giit.ch');
header('Access-Control-Allow-Headers: Content-Type, Authorization');
header('Access-Control-Allow-Methods: POST, OPTIONS');
if ($_SERVER['REQUEST_METHOD'] === 'OPTIONS') exit;
if (($_SERVER['HTTP_AUTHORIZATION'] ?? '') !== 'Bearer SECRET') { http_response_code(403); exit; }
$d = json_decode(file_get_contents('php://input'), true);
$name = preg_replace('/[^\w\- ]/u', '_', $d['name']);
file_put_contents(__DIR__ . "/data/$name.csv", $d['content']);
echo '{"ok":true}';

2. Je pagina beheert het document (postMessage)

De editor zegt csveditor:ready, je pagina antwoordt met csveditor:load, de editor meldt csveditor:loaded, csveditor:change bij echte bewerkingen en csveditor:save wanneer de gebruiker opslaat. Je pagina mag csveditor:get (de huidige toestand) of csveditor:save (op Opslaan drukken) sturen. Opslaan loopt dan via je eigen login en sessie.

<iframe id="ed" src="https://csv.giit.ch/?embed=1" allow="clipboard-write" style="width:100%;height:800px;border:0"></iframe>
<script>
const ed = document.getElementById('ed');
const ORIGIN = 'https://csv.giit.ch';

addEventListener('message', async e => {
  if (e.source !== ed.contentWindow || e.origin !== ORIGIN) return;
  const m = e.data;
  if (m.type === 'csveditor:ready') {               // de editor is klaar: geef hem het document
    ed.contentWindow.postMessage({
      type: 'csveditor:load',
      name: 'Products',
      content: await (await fetch('/data/products.csv')).text()
    }, ORIGIN);
  }
  if (m.type === 'csveditor:change') document.title = '● not saved';   // een echte bewerking
  if (m.type === 'csveditor:save') {                // de gebruiker klikte op "Opslaan"
    await fetch('/api/save', { method: 'POST', headers: { 'Content-Type': 'application/json' },
      body: JSON.stringify({ name: m.name, content: m.content }) });
    document.title = 'Saved';
  }
});

// Een opslaanknop op je eigen pagina: het antwoord komt als csveditor:save
function saveNow() { ed.contentWindow.postMessage({ type: 'csveditor:get' }, ORIGIN); }
</script>

AI-assistent binnen je pagina: die werkt ook in het frame. Met allow="clipboard-write" op het iframe gebruikt "Prompt kopiëren" direct het klembord (anders valt de editor terug op het oude kopieercommando, of toont hij de prompt om met de hand te kopiëren). Een link die de AI stuurt, kan een editor binnen een andere website niet bereiken, dus vraagt de editor de AI en de gebruiker om in plaats daarvan het hele antwoord van de AI in de editor te plakken - of de editor in een eigen venster te openen.

3. In een eigen venster

window.open("https://csv.giit.ch/?embed=window", "csveditor-17") opent de volledige editor in een eigen venster en spreekt dezelfde berichten met window.opener. Links van een AI bereiken hem daar. csveditor:load kan ook context: { host, title, rules } meegeven - de AI-prompt zegt dan waar het document thuishoort en volgt je regels - en hook: { url, token }, een webhook alleen voor dit document die nooit wordt opgeslagen. Als het venster met niet-opgeslagen wijzigingen wordt gesloten, stuurt het csveditor:closing.

4. AI via je eigen server

Geef de editor je eigen prompt, een adres op je site en een sleutel voor deze editorsessie. Het AI-venster toont dan "Verbonden met" je site, wat je de AI vertelt, en de keuze het huidige document wijzigen of een nieuw maken; Prompt kopiëren zet alles bij elkaar. De AI post het resultaat met de sleutel naar je server, en je pagina opent het in de editor - een nieuw document opent apart en blijft in de browser van de gebruiker. Eén sleutel per editorsessie: hij blijft geldig zolang de editor open is, en alleen zolang de editor er geen heeft, vraagt hij erom met csveditor:key-request. De editor verstuurt de sleutel nooit zelf en slaat hem nooit op; het adres moet https zijn op je eigen host of een subdomein ervan.

const key = async () => (await fetch('/api/ai-key.php?doc=17')).json();   // één sleutel per editorsessie
const k = await key();
ed.contentWindow.postMessage({ type: 'csveditor:load', name: 'Products', content, ai: {
  label: 'My Site', prompt: 'Keep the column names. Prices in CHF.',
  endpoint: 'https://your-site.com/api/ai-result.php', key: k.key } }, ORIGIN);
// onthoud de id uit csveditor:loaded en negeer change/save/closing met een andere id
// alleen zolang de editor geen sleutel heeft:
if (m.type === 'csveditor:key-request') { const k = await key(); ed.contentWindow.postMessage({ type: 'csveditor:ai', key: k.key }, ORIGIN); }
// zolang de editor open is, meld het elke minuut aan je server; het sluiten van de editor of de pagina maakt de sleutel ongeldig
setInterval(() => fetch('/api/ai-key.php?alive=' + k.key.slice(0, 8)), 60000);
// je server heeft een resultaat (polling, SSE …): target is "current" of "new"
ed.contentWindow.postMessage({ type: 'csveditor:load', name: 'Products', content: draft, from: 'ai', target }, ORIGIN);

Maak sleutels met minstens 128 willekeurige bits, sla alleen hun hash op, koppel elke sleutel aan de ingelogde gebruiker, het document en deze editorsessie, maak er één per sessie, houd hem alleen geldig zolang je pagina de sessie als open meldt, en maak hem ongeldig wanneer de editor of de pagina sluit.

Het hele protocol staat in llms.txt - geef het aan een AI en die bouwt de koppeling voor je systeem. De andere giit-editors werken op dezelfde manier met hun eigen voorvoegsel, bijvoorbeeld de LaTeX-editor met latexeditor: - latex.giit.ch.

Veelgestelde vragen

Wordt mijn CSV-bestand geüpload?

Nee. De editor draait volledig in je browser. Je bestanden worden nooit naar een server gestuurd, tenzij je zelf een webhook naar je eigen server instelt.

Wijzigt de editor mijn bestand als ik één cel bewerk?

Alleen die cel. De editor schrijft de wijziging precies op de plek van het veld in de CSV-tekst en laat de rest zoals het was: de andere aanhalingstekens, het scheidingsteken en de regeleinden blijven. Een veld krijgt alleen aanhalingstekens als het die nodig heeft.

Mijn CSV gebruikt puntkomma's - werkt dat?

Ja. De editor herkent komma, puntkomma, tab en verticale streep als scheidingsteken; je kunt het ook kiezen onder Formaat. Omzetten zet het bestand om naar een ander scheidingsteken.

Hoe open ik de CSV in Excel zonder kapotte speciale tekens?

Exporteer hem als XLSX, of download de CSV met een byte order mark (BOM) - vink het aan onder Formaat of kies "UTF-8 met BOM" bij het exporteren. Excel leest UTF-8 dan correct.

Kan de editor grote bestanden aan?

Ja. De tabel tekent alleen de rijen die je ziet, dus bestanden met 100 000 rijen blijven snel om te scrollen, te filteren en te bewerken.

Waar worden mijn documenten opgeslagen?

Alleen in je browser. Klik op de mapknop linksboven (Mijn documenten) om ze te openen, te hernoemen, te dupliceren, te downloaden of te verwijderen. Als je de sitegegevens van je browser wist, verdwijnen ze, dus download de documenten die je wilt bewaren - of laat de editor ze naar je eigen server sturen ("Opslaan op server"). Heel grote bestanden passen misschien niet in de opslag van de browser; de editor laat het je weten als dat gebeurt.

Kan een AI in de CSV-editor schrijven?

Ja, elke AI - ChatGPT, Claude, Gemini, Copilot of de AI in je programmeertool. Klik op "AI-assistent", dan op "Prompt kopiëren", plak hem in je AI en zeg wat die moet doen. De AI antwoordt met een link; klik erop en de tabel verschijnt in je editor. "Ongedaan maken" draait elke wijziging terug.

Kost de CSV-editor iets?

Nee. De editor is gratis, zonder reclame en zonder registratie.