Как переделать Excel в CSV: полное руководство с примерами

Почему CSV лучше Excel для обмена данными?

Формат CSV (Comma-Separated Values) стал де-факто стандартом для обмена табличными данными между разными программами. В отличие от Excel с его сложными формулами и оформлением, CSV хранит только «сырые» данные в текстовом виде — это делает файлы легче, универсальнее и совместимее с базами данных, веб-сервисами и аналитическими системами.

Представьте: вы отправляете коллеге таблицу с 10 000 строк в .xlsx. Он пытается открыть её на Mac в Numbers — и получает искажённые формулы. Или загружаете данные в Google BigQuery, а система отказывается принимать .xls из-за проприетарного формата. Вот где CSV спасает ситуацию: его понимают все, от Python до . Но как правильно конвертировать, чтобы не потерять кириллицу, даты или разделители?

Способ 1: Сохранение через Excel (самый надёжный)

Если у вас установлен Microsoft Excel (2010 и новее) или LibreOffice Calc, этот метод гарантирует минимальные потери данных. Главное — выбрать правильные настройки при сохранении.

Откройте файл в Excel и выполните:

  1. Нажмите Файл → Сохранить как
  2. В поле «Тип файла» выберите CSV (разделители — запятые) (*.csv)
  3. Нажмите Сохранить

Удалите объединённые ячейки|Замените формулы на значения (Ctrl+Shift+V)|Проверьте кодировку (UTF-8)|Убедитесь, что даты в формате ГГГГ-ММ-ДД|-->

Excel выдаст предупреждение о потере функций — это нормально. Но будьте внимательны:

⚠️ Внимание: Если в вашей таблице есть ячейки с переносами строк (Alt+Enter), они превратятся в разделители в CSV. Чтобы избежать хаоса, замените переносы на символ | или другой маркер через Найти и заменить (Ctrl+H).

Для LibreOffice Calc алгоритм аналогичен, но в диалоге сохранения дополнительно:

  • 📌 Отметьте «Edit filter settings»
  • 📌 Выберите кодировку UTF-8
  • 📌 Укажите разделитель ; (если работаете с российскими системами)
  • 📌 Включите «Quote all text cells» для текста с запятыми

Способ 2: Онлайн-конвертеры (быстро, но рискованно)

Когда под рукой нет Excel, на помощь приходят веб-сервисы вроде Convertio, Zamzar или CloudConvert. Они поддерживают пакетную обработку и не требуют установки ПО. Но есть подводные камни:

СервисМакс. размер файлаПоддержка UTF-8Ограничения
Convertio100 МБДаТребует email для файлов > 10 МБ
Zamzar50 МБДаОчередь обработки до 1 часа
CloudConvert1 ГБДаПлатный тариф для файлов > 25 МБ/день
Aconvert200 МБНет (CP1251)Проблемы с кириллицей

Инструкция для CloudConvert (оптимальный выбор):

  1. Перейдите на cloudconvert.com/xlsx-to-csv
  2. Загрузите файл или укажите ссылку на него
  3. В настройках выберите:
    • 📌 Разделитель: , или ;
    • 📌 Кодировка: UTF-8
    • 📌 Текстовый разделитель: "
  • Нажмите Convert и скачайте результат
  • ⚠️ Внимание: Сервисы вроде Aconvert по умолчанию сохраняют CSV в кодировке Windows-1251. Если ваш файл содержит символы вроде «ё», «№» или китайские иероглифы, они превратятся в кракозябры. Всегда проверяйте кодировку в Блокноте после конвертации!

    Excel/LibreOffice|Онлайн-сервисы|Python/Power Query|Другой инструмент|Не конвертирую-->

    Способ 3: Power Query (для сложных таблиц)

    Если ваш Excel-файл содержит:

    • 📊 Мultiple sheets (несколько листов)
    • 📊 Сводные таблицы
    • 📊 Данные с разными разделителями

    — то Power Query (встроенный в Excel 2016+) станет спасением. Он позволяет очищать данные перед экспортом и объединять несколько листов в один CSV.

    Алгоритм:

    1. Откройте Excel → Данные → Получить данные → Из файла → Из книги
    2. Выберите ваш .xlsx и импортируйте нужные листы
    3. В редакторе Power Query:
      • 📌 Удалите ненужные столбцы (Удалить столбцы)
      • 📌 Замените ошибки (Заменить значения)
      • 📌 Преобразуйте даты в формат YYYY-MM-DD
  • Нажмите Закрыть и загрузить в... → выберите Только создать подключение
  • Сохраните результат как CSV через Данные → Экспорт
  • Как исправить ошибку "Too many columns" в Power Query?

    Эта ошибка возникает, если в данных есть строки с большим количеством разделителей, чем заголовки столбцов. Решение:

    1. В Power Query выделите проблемный столбец.

    2. Кликните правой кнопкой → Разделить столбец → По разделителю.

    3. Укажите тот же разделитель, что и в CSV (запятая или точка с запятой).

    4. Удалите лишние столбцы после разделения.

    Способ 4: Python (автоматизация для сотен файлов)

    Для разработчиков и аналитиков Python с библиотекой pandas — самый гибкий инструмент. Он позволяет:

    • 🐍 Конвертировать пакетно (все .xlsx в папке)
    • 🐍 Настраивать разделители и кодировку
    • 🐍 Обрабатывать большие файлы (>1 ГБ)

    Установите pandas и openpyxl (если работаете с .xlsx):

    pip install pandas openpyxl

    Скрипт для конвертации с сохранением UTF-8:

    import pandas as pd
    
    

    Чтение Excel

    df = pd.read_excel('input.xlsx', engine='openpyxl')

    Сохранение в CSV с настройками

    df.to_csv('output.csv',

    index=False,

    encoding='utf-8-sig', # SIG для корректного отображения в Excel

    sep=';', # Разделитель

    quotechar='"') # Символ текстового разделителя

    Для пакетной обработки всех файлов в папке:

    import os
    

    import pandas as pd

    folder = 'path_to_folder'

    for file in os.listdir(folder):

    if file.endswith('.xlsx'):

    df = pd.read_excel(os.path.join(folder, file))

    df.to_csv(os.path.join(folder, f"{file.replace('.xlsx', '.csv')}"),

    index=False, encoding='utf-8-sig', sep=';')

    Способ 5: Командная строка (для системных администраторов)

    Если вам нужно конвертировать файлы на сервере без GUI, поможет LibreOffice в режиме командной строки. Установите его на Linux (sudo apt install libreoffice) или Windows, затем выполните:

    Базовая команда:

    soffice --headless --convert-to csv:"Text - txt - csv (StarCalc)":44,34,76,1,,0 false true false input.xlsx

    Расшифровка параметров после csv::

    • 📌 44 — кодировка (44 = UTF-8)
    • 📌 34 — символ текстового разделителя (34 = ")
    • 📌 76 — разделитель полей (76 = запятая)
    • 📌 1 — сохранять формулы как значения
    ⚠️ Внимание: На Windows пути к файлам с пробелами нужно оборачивать в двойные кавычки: "C:\My Folder\input.xlsx". Иначе командная оболочка не найдёт файл.

    Типичные ошибки и как их избежать

    Более 30% проблем при конвертации CSV связаны с неверной кодировкой или разделителями. Вот топ-5 ошибок и решения:

    ОшибкаПричинаРешение
    Кракозябры вместо кириллицыКодировка CP1251 вместо UTF-8Пересохраните в UTF-8 или используйте utf-8-sig в Python
    Данные «съехали» по столбцамРазделитель в данных совпадает с разделителем CSVОберните текстовые ячейки в кавычки или используйте ; вместо ,
    Дата стала числом (44567)Excel хранит даты как дни с 1900 годаПреобразуйте в текстовый формат ГГГГ-ММ-ДД перед экспортом
    Формулы пропалиCSV не поддерживает формулыСкопируйте данные как значения (Ctrl+Shift+V)
    Пустые строки в конце файлаАртефакты Excel при сохраненииОткройте CSV в Блокноте и удалите лишние переносы

    Для проверки результата используйте:

    • 🔍 Блокнот (покажет «сырой» CSV)
    • 🔍 Notepad++ (указывает кодировку в строке состояния)
    • 🔍 Команду file -i output.csv в Linux (покажет кодировку)

    FAQ: Частые вопросы о конвертации Excel в CSV

    Можно ли конвертировать CSV обратно в Excel без потерь?

    Технически да, но:

    • 📌 Формулы и форматирование будут утеряны навсегда
    • 📌 Даты могут преобразоваться в текст (потребуется ручная правка)
    • 📌 Объединённые ячейки станут обычными

    Используйте оригинальный .xlsx как резервную копию.

    Как конвертировать только один лист из Excel с 10 листами?

    В Excel:

    1. Скройте ненужные листы (правый клик → Скрыть)
    2. Сохраните как CSV — экспортируется только видимый лист

    В Python укажите номер листа:

    df = pd.read_excel('file.xlsx', sheet_name=1)  # 0 — первый лист
    Почему в CSV вместо запятых точки с запятой?

    Это зависит от региональных настроек Windows. В России по умолчанию разделитель — ;, в США — ,. Чтобы изменить:

    1. Откройте Панель управления → Региональные стандарты → Дополнительные параметры
    2. В поле «Разделитель элементов списка» укажите нужный символ
    3. Перезагрузите Excel

    Или принудительно задайте разделитель при сохранении.

    Как конвертировать CSV с миллионом строк без ошибок?

    Для больших файлов:

    • 📌 Используйте Python с pandas и параметром chunksize:
    • for chunk in pd.read_excel('big_file.xlsx', chunksize=10000):
      

      chunk.to_csv('output.csv', mode='a', header=False, index=False)

    • 📌 В Excel разбейте данные на несколько файлов по 500 000 строк
    • 📌 Для Linux используйте ssconvert из пакета gnumeric:
    • ssconvert input.xlsx output.csv --export-type=Gnumeric_stf:stf_csv
    Можно ли автоматизировать конвертацию для новых файлов в папке?

    Да, с помощью:

    • 📌 Power Automate (Microsoft): создайте поток, который следит за папкой и конвертирует новые .xlsx в .csv
    • 📌 Python-скрипт с watchdog:
    • from watchdog.observers import Observer
      

      from watchdog.events import FileSystemEventHandler

      class Handler(FileSystemEventHandler):

      def on_created(self, event):

      if event.src_path.endswith('.xlsx'):

      df = pd.read_excel(event.src_path)

      df.to_csv(event.src_path.replace('.xlsx', '.csv'), index=False)

      observer = Observer()

      observer.schedule(Handler(), path='.')

      observer.start()