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 онлайн - как таблицу и как текст

Редактор CSV показывает исходный CSV и таблицу рядом. Измените ячейку в таблице, и редактор изменит ровно это поле в тексте - остальные кавычки, разделитель и концы строк останутся прежними. Щелчок в таблице показывает поле в тексте, а курсор в тексте - его ячейку. Так можно быстро исправить выгрузки из магазинов, банков и баз данных, привести в порядок списки адресов или подготовить данные к импорту.

Всё работает в вашем браузере. Файлы никуда не загружаются, нет регистрации и нет рекламы.

Что умеет редактор

Как в электронной таблице

Печатайте в ячейках, перемещайтесь стрелками и клавишей Tab, копируйте и вставляйте диапазоны из Excel, LibreOffice или Google Таблиц и обратно, добавляйте, удаляйте и перемещайте строки и столбцы.

Любой CSV

Запятая, точка с запятой, табуляция или вертикальная черта как разделитель - определяется сам; со строкой заголовков или без; UTF-8 с BOM или без и Windows-1252; концы строк Windows и Unix сохраняются.

Найдите, что сломано

Строки с другим числом полей, незакрытые кавычки, пустые и повторяющиеся имена столбцов - перечислены со строкой, в одном щелчке.

Сортировка, фильтр, подробности

Сортируйте и фильтруйте вид, не трогая файл, или сортируйте сами данные. Панель столбца показывает тип значений, пустые и разные значения, сумму и среднее.

Большие файлы

Таблица отрисовывает только видимые строки: файлы со 100 000 строк остаются быстрыми при прокрутке, фильтрации и правке.

Экспорт

Книга Excel (XLSX), таблицы JSON, Markdown и HTML, TSV или CSV с другим разделителем и кодировкой - с защитой от формул электронных таблиц.

Как это работает

  1. Откройте - перетащите файл CSV в окно, откройте его через «Открыть файл…» или начните с шаблона в меню «Новый».
  2. Редактируйте - меняйте ячейки в таблице или текст слева; они следуют друг за другом. «Вставка» - для строк и столбцов, «Формат» - для разделителя.
  3. Сохраните - скачайте CSV как есть или экспортируйте его в XLSX, JSON, Markdown или HTML.

Редактор на вашем сайте

Любая страница на https (и localhost) может встроить редактор через <iframe> и ?embed=1 - без регистрации и без ключа. Во встроенном виде редактор скрывает этот текст и показывает кнопку «Сохранить». Есть два способа передать таблицу в редактор и получить её обратно.

1. Открыть файл по ссылке, сохранять на ваш сервер

src= открывает файл (ваш сервер должен разрешать CORS), webhook= заставляет «Сохранить» (Ctrl+S) отправлять документ на этот адрес. Добавьте &token=… для заголовка Authorization: Bearer … и &auto, чтобы сохранять после каждого изменения.

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

Вебхук получает POST с JSON { editor: "csv", event: "save", id, name, content, updated }. Небольшой PHP-скрипт, который его сохраняет:

<?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. Документ хранит ваша страница (postMessage)

Редактор сообщает csveditor:ready, ваша страница отвечает csveditor:load, редактор сообщает csveditor:loaded, csveditor:change при настоящих правках и csveditor:save, когда пользователь сохраняет. Ваша страница может отправить csveditor:get (текущее состояние) или csveditor:save (нажать «Сохранить»). Сохранение тогда идёт через ваш собственный вход и сеанс.

<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') {               // редактор готов: передаём ему документ
    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';   // настоящая правка
  if (m.type === 'csveditor:save') {                // пользователь нажал «Сохранить»
    await fetch('/api/save', { method: 'POST', headers: { 'Content-Type': 'application/json' },
      body: JSON.stringify({ name: m.name, content: m.content }) });
    document.title = 'Saved';
  }
});

// Кнопка сохранения на вашей странице: ответ приходит как csveditor:save
function saveNow() { ed.contentWindow.postMessage({ type: 'csveditor:get' }, ORIGIN); }
</script>

ИИ-ассистент внутри вашей страницы: он работает и во фрейме. С allow="clipboard-write" на iframe кнопка «Копировать промпт» напрямую использует буфер обмена (иначе редактор переходит на старую команду копирования или показывает промпт для ручного копирования). Ссылка, которую присылает ИИ, не может попасть в редактор внутри другого сайта, поэтому редактор просит ИИ и пользователя вставить весь ответ ИИ в редактор - или открыть редактор в отдельном окне.

3. В отдельном окне

window.open("https://csv.giit.ch/?embed=window", "csveditor-17") открывает полный редактор в отдельном окне и обменивается теми же сообщениями с window.opener. Ссылки от ИИ попадают туда. csveditor:load может также содержать context: { host, title, rules } - тогда промпт для ИИ говорит, к чему относится документ, и следует вашим правилам, - и hook: { url, token }, вебхук только для этого документа, который никогда не сохраняется. При закрытии окна с несохранёнными изменениями отправляется csveditor:closing.

4. ИИ через ваш собственный сервер

Передайте редактору свой промпт, адрес на вашем сайте и ключ для этого сеанса редактора. Тогда диалог ИИ показывает «Подключено к» вашему сайту, что вы сообщаете ИИ, и выбор изменить текущий документ или создать новый; Копировать промпт собирает всё вместе. ИИ отправляет свой результат с ключом на ваш сервер, а ваша страница открывает его в редакторе - новый документ открывается отдельно и остаётся в браузере пользователя. Один ключ на сеанс редактора: он действует, пока редактор открыт, и только пока ключа нет, редактор запрашивает его через csveditor:key-request. Редактор никогда сам не отправляет ключ и никогда не сохраняет его; адрес должен быть https на вашем собственном хосте или его поддомене.

const key = async () => (await fetch('/api/ai-key.php?doc=17')).json();   // один ключ на сеанс редактора
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);
// запомните id из csveditor:loaded и игнорируйте change/save/closing с другим id
// только пока у редактора нет ключа:
if (m.type === 'csveditor:key-request') { const k = await key(); ed.contentWindow.postMessage({ type: 'csveditor:ai', key: k.key }, ORIGIN); }
// пока редактор открыт, сообщайте серверу каждую минуту; закрытие редактора или страницы аннулирует ключ
setInterval(() => fetch('/api/ai-key.php?alive=' + k.key.slice(0, 8)), 60000);
// у вашего сервера есть результат (polling, SSE …): target - "current" или "new"
ed.contentWindow.postMessage({ type: 'csveditor:load', name: 'Products', content: draft, from: 'ai', target }, ORIGIN);

Создавайте ключи минимум из 128 случайных бит, храните только их хеш, привязывайте каждый к вошедшему пользователю, документу и этому сеансу редактора, создавайте один ключ на сеанс, считайте его действительным, только пока ваша страница сообщает, что сеанс открыт, и аннулируйте его, когда редактор или страница закрываются.

Весь протокол описан в llms.txt - дайте его ИИ, и он построит подключение для вашей системы. Другие редакторы giit работают так же со своим префиксом, например редактор LaTeX с latexeditor: - latex.giit.ch.

Частые вопросы

Мой файл CSV куда-то загружается?

Нет. Редактор полностью работает в вашем браузере. Ваши файлы никогда не отправляются на сервер, если только вы сами не настроите вебхук на свой собственный сервер.

Меняет ли редактор мой файл, когда я правлю одну ячейку?

Только эту ячейку. Редактор записывает изменение в текст CSV ровно там, где находится поле, а остальное оставляет как было: другие кавычки, разделитель и концы строк сохраняются. Поле заключается в кавычки, только когда это нужно.

В моём CSV разделитель - точка с запятой. Это работает?

Да. Редактор определяет в качестве разделителя запятую, точку с запятой, табуляцию и вертикальную черту; его можно выбрать и в Формате. Преобразовать переводит файл на другой разделитель.

Как открыть CSV в Excel без испорченных букв (кириллицы, умлаутов)?

Экспортируйте его в XLSX или скачайте CSV с меткой порядка байтов (BOM) - отметьте её в Формате или выберите «UTF-8 с BOM» в экспорте. Тогда Excel правильно читает UTF-8.

Справляется ли он с большими файлами?

Да. Таблица отрисовывает только видимые строки, поэтому файлы со 100 000 строк остаются быстрыми при прокрутке, фильтрации и правке.

Где сохраняются мои документы?

Только в вашем браузере. Нажмите кнопку с папкой вверху слева («Мои документы»), чтобы открывать, переименовывать, дублировать, скачивать или удалять их. Очистка данных сайта в браузере удалит их, поэтому скачайте те, которые хотите сохранить, - или пусть редактор отправляет их на ваш собственный сервер («На сервер»). Очень большие файлы могут не поместиться в хранилище браузера; редактор сообщит, если это произойдёт.

Может ли ИИ работать в редакторе CSV?

Да, любой ИИ - ChatGPT, Claude, Gemini, Copilot или ИИ в вашем инструменте для программирования. Нажмите «ИИ-ассистент», затем «Копировать промпт», вставьте его в свой ИИ и скажите, что нужно сделать. ИИ ответит ссылкой; щёлкните по ней, и таблица появится в вашем редакторе. «Отменить» возвращает любое изменение.

Сколько стоит редактор CSV?

Нисколько. Редактор бесплатный, без рекламы и без регистрации.