Конвертер Excel в SQL
Загрузите файл Excel для преобразования в SQL-запросы INSERT
Перетащите файл Excel сюда или нажмите для выбора
Что такое Excel в SQL?
Excel в SQL — это онлайн-инструмент преобразования форматов данных, который конвертирует файлы Excel (.xlsx/.xls) в SQL-запросы INSERT для удобного импорта в базы данных.
Excel — это наиболее широко используемый формат электронных таблиц, применяемый для хранения и анализа данных. SQL — это стандартный язык запросов для реляционных баз данных, а запросы INSERT используются для вставки данных в таблицы базы данных.
С помощью этого инструмента вы можете быстро преобразовать данные электронных таблиц Excel в исполняемые SQL-запросы с поддержкой выбора нескольких листов, пользовательских имён таблиц и стилей кавычек для удобной миграции и импорта данных.
Как использовать
Как использовать
- Загрузите файл Excel (формат .xlsx или .xls)
- Если в файле несколько листов, выберите нужный для конвертации
- Задайте имя таблицы (по умолчанию table_name)
- Выберите, использовать ли первую строку в качестве названий полей
- SQL-выражения INSERT генерируются автоматически, копируются одним нажатием
Проверка генерации SQL
- Проверьте названия столбцов, типы данных, кавычки и обработку NULL перед запуском сгенерированного SQL на реальной базе данных.
- Для импорта в рабочую среду сначала протестируйте на временной таблице и сохраните резервную копию исходной таблицы.
Применение
Технический принцип
Страница разбирает загруженную рабочую книгу с помощью SheetJS — XLSX.read(arrayBuffer, {type: 'array'}) возвращает объект рабочей книги, чей лист содержит ячейки с индексацией по ключам A1, затем XLSX.utils.sheet_to_json(sheet, {header: 1, defval: null}) проходит по ограниченному диапазону !ref, формируя массив массивов. Первая непустая строка (когда включена опция «первая строка — заголовок») принимается за имена столбцов; иначе синтезируются имена в стиле SheetJS: col1, col2, col3. Каждая оставшаяся строка выводится как отдельный SQL-запрос вида INSERT INTO `table` (`c1`, `c2`, ...) VALUES (v1, v2, ...);, с опциональным CREATE TABLE `table` (`c1` VARCHAR(255), ...); в начале. Кавычки идентификаторов зависят от диалекта SQL и регулируются стандартом SQL:1992 и отклонениями каждого вендора: стандартный SQL и PostgreSQL берут идентификаторы в двойные кавычки ("col"), MySQL и MariaDB по умолчанию используют обратные кавычки (`col`) и принимают двойные только при включённом режиме ANSI_QUOTES, SQLite принимает оба варианта (а для обратной совместимости трактует двойные кавычки, которые не разрешаются как идентификаторы, как строковые литералы — известный подводный камень, документированный на странице SQLite Quirks), SQL Server и Sybase используют квадратные скобки ([col]). Кавычки значений следуют правилам строковых литералов SQL: одинарные кавычки оборачивают литерал, а внутренние одинарные кавычки удваиваются ('O''Brien'), согласно ISO/IEC 9075. Пустые ячейки соответствуют литералу NULL без кавычек, а не пустой строке ''; числовой ячейки с cell.t === 'n' выводятся без кавычек; булевы значения становятся 1/0 или TRUE/FALSE в зависимости от диалекта; даты требуют отдельной обработки. Ячейки с датами требуют особого внимания, поскольку SheetJS сохраняет underlying числовой серийный номер: Excel хранит даты как количество дней с 1900-01-01 с историческим багом високосного 1900-02-29, сдвигающим даты до марта 1900 на один день, а система Excel-for-Mac 1904 использует 1904-01-01 как эпоху. Преобразование в ISO 8601 (YYYY-MM-DD HH:mm:ss — формат, который принимают и MySQL DATETIME, и PostgreSQL TIMESTAMP) выполняется по формуле (serial - 25569) * 86400000 мс от юникс-эпохи с последующим форматированием в UTC. Вывод типов — чисто лексический и неглубокий: столбец, первая непустая ячейка которого целое число, становится INT, десятичное — DECIMAL(10,2), текст — VARCHAR(255), а столбец, начинающийся с 2024-01-01, может экспортироваться как строка, если исходная ячейка не помечена cell.t === 'd'. Массовые вставки выводятся по одному INSERT на строку, что медленно при масштабе; объединение 100–500 строк в один INSERT INTO t VALUES (...), (...), ...; сокращает сетевые круговые запросы примерно в 100 раз, а оборачивание скрипта в BEGIN; ... COMMIT; превращает импорт в одну атомарную транзакцию, откатываемую при ошибке первой строки.
- Кавычки идентификаторов по диалектам: MySQL/MariaDB `col` (обратные кавычки, или "col" при включённом ANSI_QUOTES); PostgreSQL и стандартный SQL "col"; SQL Server [col]; SQLite принимает оба варианта (но "col" молча подставляется как строковый литерал, когда col не является известным идентификатором).
- Экранирование строковых литералов (ISO/IEC 9075): оборачивание одинарными кавычками и удвоение внутренних (O'Brien → 'O''Brien'); никогда не вставляйте сырые обратные слеши — PostgreSQL standard_conforming_strings по умолчанию включён с версии 9.1.
- Серийный номер даты Excel: дни с 1900-01-01 с багом 1900-02-29 (или 1904-01-01, если workbook.date1904 = true); строка ISO 8601 = new Date((serial - 25569) * 86400000).toISOString().
- Вывод типов лексический: целые → INT, десятичные → DECIMAL(10,2), текст → VARCHAR(255); даты, которые выглядят как даты, но не помечены cell.t === 'd', экспортируются как строки; денежные ячейки с разделителем тысяч экспортируются с разделителем внутри строки.
- Обработка NULL: пустая ячейка Excel становится литералом NULL без кавычек, а не '' — разница важна для столбцов NOT NULL и для COUNT(col), который пропускает NULL, но считает ''.
- Массовая вставка: объединение 100–500 строк в один INSERT INTO t VALUES (...),(...),...; сокращает сетевые круговые запросы примерно в 100 раз по сравнению с одним INSERT на строку; max_allowed_packet в MySQL (по умолчанию 64 МБ) ограничивает размер одного запроса.
- Оборачивайте сгенерированный скрипт в BEGIN;...COMMIT; (PostgreSQL/SQLite) или START TRANSACTION;...COMMIT; (MySQL InnoDB), чтобы одна неудачная строка откатывала всю пакетную операцию; таблицы MyISAM игнорируют транзакцию и частично фиксируют изменения.
Примеры
Лист Excel → выражения INSERT
Лист "users" (3 строки):
id | name | email | age
1 | Alice | alice@mail.com | 28
2 | Bob | bob@mail.com | 34
Сгенерированный SQL:
INSERT INTO users (id, name, email, age) VALUES (1, 'Alice', 'alice@mail.com', 28);
INSERT INTO users (id, name, email, age) VALUES (2, 'Bob', 'bob@mail.com', 34);Один INSERT на несколько строк (быстрее импорт)
Используйте опцию «объединить строки» для массовой загрузки:
INSERT INTO products (sku, name, price) VALUES
('A001', 'USB-C Cable', 9.90),
('A002', 'HDMI Adapter', 14.50),
('A003', 'Mouse Pad', 4.25);
Сокращает 3 обращения к серверу до 1 — безопаснее для пакетов по 100–500 строк.Экранирование кавычек в именах с апострофами
Исходная ячейка: O'Brien
Сгенерированный SQL (одинарные кавычки удвоены):
INSERT INTO customers (id, name) VALUES (42, 'O''Brien');
Обработка NULL — пустая ячейка Excel становится литералом NULL, а не '':
INSERT INTO customers (id, phone) VALUES (43, NULL);Оборачивание импорта в транзакцию
BEGIN;
INSERT INTO orders (id, customer_id, total, created_at) VALUES (1001, 7, 199.50, '2026-06-01');
INSERT INTO orders (id, customer_id, total, created_at) VALUES (1002, 7, 42.00, '2026-06-02');
INSERT INTO orders (id, customer_id, total, created_at) VALUES (1003, 9, 78.30, '2026-06-03');
COMMIT;
Если любая строка завершится с ошибкой, весь пакет откатится.Часто задаваемые вопросы
Загружается ли таблица на сервер?
Нет. Файл разбирается прямо в браузере с помощью SheetJS, и SQL генерируется локально. На сервер ничего не отправляется, поэтому даже конфиденциальные данные остаются на вашем устройстве.
Какой SQL получается на выходе?
Сначала идёт оператор CREATE TABLE, затем отдельные строки INSERT INTO (по одной строке на оператор). В сгенерированном SQL используется введённое вами имя таблицы и выбранный стиль кавычек (одинарные, двойные или обратные).
Как определяются типы столбцов?
Инструмент анализирует данные каждого столбца и подбирает наиболее узкий подходящий тип: INTEGER, DECIMAL, VARCHAR(N), BOOLEAN или DATE/DATETIME. Перед генерацией SQL вы можете изменить тип вручную. Столбцы со смешанными типами по умолчанию попадают в VARCHAR.
А как быть с датами Excel?
В Excel даты хранятся как порядковые числа. Инструмент выводит их в том виде, в котором они хранятся в листе. Проверьте сгенерированный SQL и при необходимости поправьте литералы дат под формат вашей целевой базы.
Как экранируются спецсимволы и кавычки?
Одинарные кавычки удваиваются (Smith's → Smith''s). Обратные слэши и Unicode передаются как есть — это соответствует строкам PostgreSQL по стандарту. Если вы работаете с MySQL без режима NO_BACKSLASH_ESCAPES, обратные слэши, возможно, придётся экранировать вручную.
Будет ли результат работать в MySQL, PostgreSQL, SQLite, MSSQL?
Базовые INSERT работают во всех четырёх СУБД. В CREATE TABLE используются переносимые типы (INT, VARCHAR, DECIMAL, DATE). Для специфичных диалектных типов (SERIAL, AUTO_INCREMENT, IDENTITY) подправьте оператор CREATE под вашу СУБД.
Вычисляются ли формулы?
Нет. Используется кэшированное значение, которое сохранил Excel. Если нужны актуальные результаты формул, откройте исходную книгу, пересчитайте, сохраните и загрузите файл заново.