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.
Редактор CSV показує вихідний CSV і таблицю поруч. Змініть клітинку в таблиці, і редактор змінить саме це поле в тексті - решта лапок, розділювач і кінці рядків залишаються як були. Клацання в таблиці показує поле в тексті, а курсор у тексті показує його клітинку. Так можна швидко виправляти експорти з магазинів, банків і баз даних, упорядковувати списки адрес або готувати дані до імпорту.
Усе працює у вашому браузері. Файли нікуди не вивантажуються, немає ні реєстрації, ні реклами.
Пишіть у клітинки, переміщуйтеся стрілками й Tab, копіюйте й вставляйте діапазони з Excel, LibreOffice чи Google Таблиць і туди, додавайте, видаляйте й переміщуйте рядки та стовпці.
Кома, крапка з комою, табуляція чи вертикальна риска як розділювач, визначається автоматично; з рядком заголовків або без; UTF-8 з BOM або без і Windows-1252; кінці рядків Windows і Unix зберігаються.
Рядки з іншою кількістю полів, незакриті лапки, порожні й повторювані імена стовпців - перелічено з номером рядка, за одне клацання.
Сортуйте й фільтруйте вигляд, не змінюючи файл, або сортуйте самі дані. Панель стовпця показує тип значень, порожні й різні значення, суму й середнє.
Таблиця малює лише видимі рядки: файли зі 100 000 рядків залишаються швидкими для прокручування, фільтрування й редагування.
Книга Excel (XLSX), JSON, таблиці Markdown і HTML, TSV або CSV з іншим розділювачем і кодуванням - із захистом від формул електронних таблиць.
Будь-яка сторінка https (і localhost) може вбудувати редактор за допомогою <iframe> і ?embed=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}';
Редактор повідомляє 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 «Копіювати промпт» використовує буфер обміну напряму (інакше редактор вдається до старої команди копіювання або показує промпт, щоб скопіювати його вручну). Посилання, яке надсилає ШІ, не може дістатися до редактора всередині іншого сайту, тому редактор просить ШІ та користувача натомість вставити всю відповідь ШІ в редактор - або відкрити редактор в окремому вікні.
window.open("https://csv.giit.ch/?embed=window", "csveditor-17") відкриває повний редактор в окремому вікні, і він обмінюється тими самими повідомленнями з window.opener. Посилання від ШІ доходять до нього туди. csveditor:load може також містити context: { host, title, rules } - тоді промпт для ШІ каже, де розміщено документ, і дотримується ваших правил - і hook: { url, token }, вебхук лише для цього документа, який ніколи не зберігається. Якщо закрити вікно з незбереженими змінами, надсилається csveditor:closing.
Передайте редактору власний промпт, адресу на вашому сайті та ключ для цього сеансу редактора. Тоді діалог ШІ показує «Під’єднано до» вашого сайту, що ви повідомляєте ШІ, і вибір змінити поточний документ або створити новий; Копіювати промпт збирає все разом. ШІ надсилає свій результат із ключем на ваш сервер, а ваша сторінка відкриває його в редакторі - новий документ відкривається окремо й залишається в браузері користувача. Один ключ на сеанс редактора: він дійсний, поки редактор відкрито, і лише поки ключа немає, редактор запитує його через 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 саме там, де розташоване поле, і залишає решту як була: інші лапки, розділювач і кінці рядків зберігаються. Поле береться в лапки, лише коли це потрібно.
Так. Редактор розпізнає кому, крапку з комою, табуляцію й вертикальну риску як розділювач; його можна також вибрати у Формат. Перетворити змінює розділювач файлу на інший.
Експортуйте його як XLSX або завантажте CSV з позначкою порядку байтів (BOM) - увімкніть її у Формат або виберіть «UTF-8 з BOM» в експорті. Тоді Excel правильно читає UTF-8.
Так. Таблиця малює лише видимі рядки, тож файли зі 100 000 рядків залишаються швидкими для прокручування, фільтрування й редагування.
Лише у вашому браузері. Натисніть кнопку з текою вгорі ліворуч («Мої документи»), щоб відкривати, перейменовувати, дублювати, завантажувати або видаляти їх. Очищення даних сайту в браузері видаляє їх, тому завантажте ті, які хочете зберегти, - або нехай редактор надсилає їх на ваш власний сервер («На сервер»). Дуже великі файли можуть не вміститися в сховище браузера; редактор повідомить, якщо так станеться.
Так, будь-який ШІ - ChatGPT, Claude, Gemini, Copilot або ШІ у вашому інструменті для програмування. Натисніть «ШІ-асистент», потім «Копіювати промпт», вставте його у свій ШІ та скажіть, що треба зробити. ШІ відповідає посиланням; клацніть його, і таблиця з’явиться у вашому редакторі. «Скасувати» повертає кожну зміну назад.
Ні. Редактор безкоштовний, без реклами й без реєстрації.