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

Edite arquivos CSV online, como tabela e como texto

O Editor CSV mostra o CSV bruto e a tabela lado a lado. Edite uma célula na tabela e o editor muda exatamente aquele campo no texto - as outras aspas, o separador e os finais de linha ficam como estavam. Um clique na tabela mostra o campo no texto, e o cursor no texto mostra a célula dele. Assim fica rápido corrigir exportações de lojas, bancos e bancos de dados, limpar listas de endereços ou preparar dados para importação.

Tudo roda no seu navegador. Os arquivos não são enviados, não há cadastro nem publicidade.

O que o editor sabe fazer

Como uma planilha

Digite nas células, mova-se com as setas e o Tab, copie e cole intervalos de e para o Excel, o LibreOffice ou o Google Sheets, adicione, exclua e mova linhas e colunas.

Qualquer CSV

Vírgula, ponto e vírgula, tabulação ou barra vertical como separador, detectado sozinho; com ou sem linha de cabeçalho; UTF-8 com ou sem BOM e Windows-1252; os finais de linha do Windows e do Unix são mantidos.

Ache o que está quebrado

Linhas com outro número de campos, aspas que nunca são fechadas, nomes de coluna vazios e repetidos - listados com a linha, a um clique de distância.

Ordene, filtre, olhe de perto

Ordene e filtre a visualização sem mexer no arquivo, ou ordene os próprios dados. O painel da coluna mostra o tipo dos valores, os vazios e os diferentes, a soma e a média.

Arquivos grandes

A tabela desenha só as linhas que você vê: arquivos com 100 000 linhas continuam rápidos para rolar, filtrar e editar.

Exportar

Pasta de trabalho do Excel (XLSX), tabelas JSON, Markdown e HTML, TSV, ou CSV com outro separador e outra codificação - com proteção contra fórmulas de planilha.

Como funciona

  1. Abra - solte um arquivo CSV na janela, abra-o com "Abrir arquivo…" ou comece com um modelo em "Novo".
  2. Edite - altere células na tabela ou o texto à esquerda; um acompanha o outro. Use "Inserir" para linhas e colunas, "Formato" para o separador.
  3. Salve - baixe o CSV como está, ou exporte-o como XLSX, JSON, Markdown ou HTML.

Use o editor no seu próprio site

Qualquer página https (e localhost) pode incorporar o editor com um <iframe> e ?embed=1 - sem cadastro, sem chave. Incorporado, o editor oculta este texto e mostra um botão Salvar. Há dois jeitos de levar a tabela para dentro e para fora.

1. Abrir um arquivo de um link, salvar no seu servidor

src= abre um arquivo (seu servidor precisa permitir CORS), webhook= faz "Salvar" (Ctrl+S) enviar o documento para esse endereço. Acrescente &token=… para um cabeçalho Authorization: Bearer … e &auto para salvar após cada alteração.

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

O webhook recebe um POST com JSON { editor: "csv", event: "save", id, name, content, updated }. Um pequeno script PHP que o guarda:

<?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. A sua página guarda o documento (postMessage)

O editor diz csveditor:ready, a sua página responde com csveditor:load, o editor informa csveditor:loaded, csveditor:change em edições reais e csveditor:save quando o usuário salva. A sua página pode enviar csveditor:get (o estado atual) ou csveditor:save (apertar Salvar). Salvar passa então pelo seu próprio login e sessão.

<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') {               // o editor está pronto: entregue o documento a ele
    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';   // uma edição real
  if (m.type === 'csveditor:save') {                // o usuário clicou em "Salvar"
    await fetch('/api/save', { method: 'POST', headers: { 'Content-Type': 'application/json' },
      body: JSON.stringify({ name: m.name, content: m.content }) });
    document.title = 'Saved';
  }
});

// Um botão de salvar na sua própria página: a resposta chega como csveditor:save
function saveNow() { ed.contentWindow.postMessage({ type: 'csveditor:get' }, ORIGIN); }
</script>

Assistente de IA dentro da sua página: ele também funciona no frame. Com allow="clipboard-write" no iframe, "Copiar prompt" usa a área de transferência diretamente (senão o editor recorre ao antigo comando de copiar, ou mostra o prompt para copiar à mão). Um link enviado pela IA não alcança um editor dentro de outro site, então o editor pede à IA e ao usuário que colem a resposta inteira da IA no editor - ou abram o editor em uma janela própria.

3. Em uma janela própria

window.open("https://csv.giit.ch/?embed=window", "csveditor-17") abre o editor completo em uma janela própria e troca as mesmas mensagens com window.opener. Os links de uma IA chegam até ele ali. csveditor:load também pode levar context: { host, title, rules } - o prompt da IA então diz a que lugar o documento pertence e segue as suas regras - e hook: { url, token }, um webhook só para este documento que nunca é guardado. Fechar a janela com alterações não salvas envia csveditor:closing.

4. IA pelo seu próprio servidor

Entregue ao editor o seu próprio prompt, um endereço no seu site e uma chave para esta sessão do editor. A janela de IA mostra então "Conectado a" o seu site, o que você diz à IA, e a escolha alterar o documento atual ou criar um novo; Copiar prompt junta tudo. A IA envia o resultado com a chave para o seu servidor, e a sua página o abre no editor - um novo documento abre separado e fica no navegador do usuário. Uma chave por sessão do editor: ela vale enquanto o editor estiver aberto, e só enquanto não tiver nenhuma o editor a pede com csveditor:key-request. O editor nunca envia a chave por conta própria e nunca a guarda; o endereço precisa ser https no seu próprio host ou em um subdomínio dele.

const key = async () => (await fetch('/api/ai-key.php?doc=17')).json();   // uma chave por sessão do editor
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);
// guarde o id de csveditor:loaded e ignore change/save/closing com outro id
// só enquanto o editor não tiver chave:
if (m.type === 'csveditor:key-request') { const k = await key(); ed.contentWindow.postMessage({ type: 'csveditor:ai', key: k.key }, ORIGIN); }
// enquanto o editor estiver aberto, avise o seu servidor a cada minuto; fechar o editor ou a página invalida a chave
setInterval(() => fetch('/api/ai-key.php?alive=' + k.key.slice(0, 8)), 60000);
// o seu servidor tem um resultado (polling, SSE …): target é "current" ou "new"
ed.contentWindow.postMessage({ type: 'csveditor:load', name: 'Products', content: draft, from: 'ai', target }, ORIGIN);

Crie chaves com pelo menos 128 bits aleatórios, guarde só o hash delas, vincule cada uma ao usuário logado, ao documento e a esta sessão do editor, crie uma por sessão, mantenha-a válida só enquanto a sua página informar que a sessão está aberta, e invalide-a quando o editor ou a página fechar.

O protocolo completo está em llms.txt - entregue-o a uma IA e ela monta a conexão para o seu sistema. Os outros editores giit funcionam do mesmo jeito com o seu próprio prefixo, por exemplo o Editor LaTeX com latexeditor: - latex.giit.ch.

Perguntas frequentes

Meu arquivo CSV é enviado para algum lugar?

Não. O editor roda inteiramente no seu navegador. Seus arquivos nunca são enviados a um servidor, a não ser que você mesmo configure um webhook para o seu próprio servidor.

O editor muda o meu arquivo quando edito uma célula?

Só aquela célula. O editor grava a alteração no texto CSV exatamente onde o campo está e deixa o resto como estava: as outras aspas, o separador e os finais de linha ficam. Um campo só é colocado entre aspas quando precisa.

Meu CSV usa ponto e vírgula - funciona?

Sim. O editor detecta vírgula, ponto e vírgula, tabulação e barra vertical como separador; você também pode escolhê-lo em Formato. Converter passa o arquivo para outro separador.

Como abro o CSV no Excel sem acentos quebrados?

Exporte como XLSX, ou baixe o CSV com marca de ordem de bytes (BOM) - marque essa opção em Formato ou escolha "UTF-8 com BOM" na exportação. Assim o Excel lê UTF-8 corretamente.

Ele aguenta arquivos grandes?

Sim. A tabela desenha só as linhas que você vê, então arquivos com 100 000 linhas continuam rápidos para rolar, filtrar e editar.

Onde meus documentos ficam salvos?

Só no seu navegador. Clique no botão de pasta no canto superior esquerdo (Meus documentos) para abrir, renomear, duplicar, baixar ou excluir os documentos. Limpar os dados do site no navegador os apaga, então baixe os que você quer manter - ou deixe o editor enviá-los ao seu próprio servidor ("Salvar no servidor"). Arquivos muito grandes podem não caber no armazenamento do navegador; o editor avisa quando isso acontece.

Uma IA pode escrever no Editor CSV?

Sim, qualquer IA - ChatGPT, Claude, Gemini, Copilot ou a IA da sua ferramenta de programação. Clique em "Assistente de IA", depois em "Copiar prompt", cole na sua IA e diga o que ela deve fazer. A IA responde com um link; clique nele e a tabela aparece no seu editor. "Desfazer" desfaz qualquer alteração.

O Editor CSV custa alguma coisa?

Não. O editor é gratuito, sem anúncios e sem cadastro.