No data rows yet - type into the row marked + or paste cells from a spreadsheet.
No data rows yet - type into the row marked + or paste cells from a spreadsheet.
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.
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.
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.
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 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.
A tabela desenha só as linhas que você vê: arquivos com 100 000 linhas continuam rápidos para rolar, filtrar e editar.
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.
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.
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}';
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
Não. O editor é gratuito, sem anúncios e sem cadastro.