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

Modifier des fichiers CSV en ligne, en tableau et en texte

L’éditeur CSV affiche le CSV brut et le tableau côte à côte. Modifiez une cellule du tableau et l’éditeur change exactement ce champ dans le texte - les autres guillemets, le séparateur et les fins de ligne restent tels quels. Un clic dans le tableau montre le champ dans le texte, et le curseur dans le texte montre sa cellule. Corriger des exports de boutiques, de banques et de bases de données, nettoyer des listes d’adresses ou préparer des données à importer devient ainsi rapide.

Tout fonctionne dans votre navigateur. Les fichiers ne sont pas envoyés, il n’y a ni inscription ni publicité.

Ce que l’éditeur sait faire

Comme un tableur

Tapez dans les cellules, déplacez-vous avec les flèches et Tab, copiez et collez des plages depuis et vers Excel, LibreOffice ou Google Sheets, ajoutez, supprimez et déplacez des lignes et des colonnes.

Tout CSV

Virgule, point-virgule, tabulation ou barre verticale comme séparateur, détecté automatiquement ; avec ou sans ligne d’en-tête ; UTF-8 avec ou sans BOM et Windows-1252 ; les fins de ligne Windows et Unix sont conservées.

Trouver ce qui cloche

Lignes avec un nombre de champs différent, guillemets jamais fermés, noms de colonnes vides ou répétés - listés avec leur ligne, à un clic.

Trier, filtrer, examiner

Triez et filtrez l’affichage sans toucher au fichier, ou triez les données elles-mêmes. Le panneau de colonne montre le genre de valeurs, les vides et les différentes, la somme et la moyenne.

Gros fichiers

Le tableau ne dessine que les lignes visibles : les fichiers de 100 000 lignes restent rapides à faire défiler, filtrer et modifier.

Export

Classeur Excel (XLSX), JSON, tableaux Markdown et HTML, TSV, ou CSV avec un autre séparateur et un autre encodage - avec une protection contre les formules de tableur.

Comment ça marche

  1. Ouvrir - déposez un fichier CSV dans la fenêtre, ouvrez-le avec « Ouvrir un fichier… », ou commencez avec un modèle sous « Nouveau ».
  2. Modifier - changez les cellules du tableau ou le texte à gauche ; l’un suit l’autre. Utilisez « Insérer » pour les lignes et les colonnes, « Format » pour le séparateur.
  3. Enregistrer - téléchargez le CSV tel quel, ou exportez-le en XLSX, JSON, Markdown ou HTML.

Utiliser l’éditeur sur votre propre site web

Toute page https (et localhost) peut intégrer l’éditeur avec une <iframe> et ?embed=1 - sans inscription, sans clé. Intégré, l’éditeur masque ce texte et affiche un bouton Enregistrer. Il y a deux façons de faire entrer et sortir le tableau.

1. Ouvrir un fichier depuis un lien, enregistrer sur votre serveur

src= ouvre un fichier (votre serveur doit autoriser CORS), webhook= fait envoyer le document à cette adresse par « Enregistrer » (Ctrl+S). Ajoutez &token=… pour un en-tête Authorization: Bearer … et &auto pour enregistrer après chaque modification.

<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>

Le webhook reçoit un POST avec du JSON { editor: "csv", event: "save", id, name, content, updated }. Un petit script PHP qui l’enregistre :

<?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. Votre page détient le document (postMessage)

L’éditeur annonce csveditor:ready, votre page répond par csveditor:load, l’éditeur signale csveditor:loaded, csveditor:change lors de vraies modifications et csveditor:save quand l’utilisateur enregistre. Votre page peut envoyer csveditor:get (l’état actuel) ou csveditor:save (appuyer sur Enregistrer). L’enregistrement passe alors par votre propre connexion et votre propre session.

<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') {               // l’éditeur est prêt : on lui transmet le 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';   // une vraie modification
  if (m.type === 'csveditor:save') {                // l’utilisateur a cliqué sur "Save"
    await fetch('/api/save', { method: 'POST', headers: { 'Content-Type': 'application/json' },
      body: JSON.stringify({ name: m.name, content: m.content }) });
    document.title = 'Saved';
  }
});

// Un bouton d’enregistrement sur votre propre page : la réponse arrive sous forme de csveditor:save
function saveNow() { ed.contentWindow.postMessage({ type: 'csveditor:get' }, ORIGIN); }
</script>

L’assistant IA dans votre page : il fonctionne aussi dans le cadre. Avec allow="clipboard-write" sur l’iframe, « Copier le prompt » utilise directement le presse-papiers (sinon l’éditeur se rabat sur l’ancienne commande de copie, ou affiche le prompt à copier à la main). Un lien envoyé par l’IA ne peut pas atteindre un éditeur intégré dans un autre site web : l’éditeur demande donc à l’IA et à l’utilisateur de coller toute la réponse de l’IA dans l’éditeur - ou d’ouvrir l’éditeur dans sa propre fenêtre.

3. Dans sa propre fenêtre

window.open("https://csv.giit.ch/?embed=window", "csveditor-17") ouvre l’éditeur complet dans sa propre fenêtre et échange les mêmes messages avec window.opener. Les liens d’une IA l’y atteignent. csveditor:load peut aussi transporter context: { host, title, rules } - le prompt de l’IA indique alors où se trouve le document et suit vos règles - et hook: { url, token }, un webhook pour ce seul document, jamais stocké. Fermer la fenêtre avec des modifications non enregistrées envoie csveditor:closing.

4. L’IA via votre propre serveur

Transmettez à l’éditeur votre propre prompt, une adresse sur votre site et une clé pour cette session de l’éditeur. La boîte de dialogue de l’IA affiche alors « Connecté à » votre site, ce que vous indiquez à l’IA, et le choix modifier le document actuel ou en créer un nouveau ; Copier le prompt assemble le tout. L’IA envoie son résultat avec la clé à votre serveur, et votre page l’ouvre dans l’éditeur - un nouveau document s’ouvre séparément et reste dans le navigateur de l’utilisateur. Une clé par session de l’éditeur : elle reste valable tant que l’éditeur est ouvert, et l’éditeur ne la demande avec csveditor:key-request que tant qu’il n’en a pas. L’éditeur n’envoie jamais la clé lui-même et ne la stocke jamais ; l’adresse doit être en https sur votre propre hôte ou sur un de ses sous-domaines.

const key = async () => (await fetch('/api/ai-key.php?doc=17')).json();   // une clé par session de l’éditeur
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);
// retenez l’id de csveditor:loaded et ignorez change/save/closing portant un autre id
// seulement tant que l’éditeur n’a pas de clé :
if (m.type === 'csveditor:key-request') { const k = await key(); ed.contentWindow.postMessage({ type: 'csveditor:ai', key: k.key }, ORIGIN); }
// tant que l’éditeur est ouvert, prévenez votre serveur chaque minute ; fermer l’éditeur ou la page annule la clé
setInterval(() => fetch('/api/ai-key.php?alive=' + k.key.slice(0, 8)), 60000);
// votre serveur a un résultat (polling, SSE …) : target vaut "current" ou "new"
ed.contentWindow.postMessage({ type: 'csveditor:load', name: 'Products', content: draft, from: 'ai', target }, ORIGIN);

Créez des clés d’au moins 128 bits aléatoires, ne stockez que leur hash, liez chacune à l’utilisateur connecté, au document et à cette session de l’éditeur, créez-en une par session, ne la gardez valable que tant que votre page signale la session comme ouverte, et annulez-la quand l’éditeur ou la page se ferme.

Le protocole complet se trouve dans llms.txt - donnez-le à une IA et elle construit la connexion pour votre système. Les autres éditeurs giit fonctionnent de la même façon avec leur propre préfixe, par exemple l’éditeur LaTeX avec latexeditor: - latex.giit.ch.

Questions fréquentes

Mon fichier CSV est-il envoyé sur un serveur ?

Non. L’éditeur fonctionne entièrement dans votre navigateur. Vos fichiers ne sont jamais envoyés à un serveur, sauf si vous configurez vous-même un webhook vers votre propre serveur.

L’éditeur modifie-t-il mon fichier quand je change une cellule ?

Seulement cette cellule. L’éditeur écrit la modification dans le texte CSV exactement là où se trouve le champ et laisse le reste tel quel : les autres guillemets, le séparateur et les fins de ligne restent. Un champ n’est mis entre guillemets que s’il en a besoin.

Mon CSV utilise des points-virgules - est-ce que ça marche ?

Oui. L’éditeur détecte la virgule, le point-virgule, la tabulation et la barre verticale comme séparateur ; vous pouvez aussi le choisir sous Format. Convertir passe le fichier à un autre séparateur.

Comment ouvrir le CSV dans Excel sans accents abîmés ?

Exportez-le en XLSX, ou téléchargez le CSV avec une marque d’ordre des octets (BOM) - cochez-la sous Format ou choisissez « UTF-8 avec BOM » dans l’export. Excel lit alors correctement l’UTF-8.

Gère-t-il les gros fichiers ?

Oui. Le tableau ne dessine que les lignes visibles : les fichiers de 100 000 lignes restent rapides à faire défiler, filtrer et modifier.

Où mes documents sont-ils enregistrés ?

Uniquement dans votre navigateur. Cliquez sur le bouton dossier en haut à gauche (Mes documents) pour les ouvrir, renommer, dupliquer, télécharger ou supprimer. Effacer les données de site de votre navigateur les supprime : téléchargez ceux que vous voulez garder - ou laissez l’éditeur les envoyer à votre propre serveur (« Enregistrer sur un serveur »). Les très gros fichiers peuvent ne pas tenir dans la mémoire du navigateur ; l’éditeur vous le signale le cas échéant.

Une IA peut-elle écrire dans l’éditeur CSV ?

Oui, n’importe quelle IA - ChatGPT, Claude, Gemini, Copilot ou l’IA de votre outil de développement. Cliquez sur « Assistant IA », puis sur « Copier le prompt », collez-le dans votre IA et dites-lui ce qu’elle doit faire. L’IA répond par un lien ; cliquez dessus et le tableau apparaît dans votre éditeur. « Annuler » revient sur chaque modification.

L’éditeur CSV est-il payant ?

Non. L’éditeur est gratuit, sans publicité et sans inscription.