Как открыть CSV-файл, который слишком большой для Excel
Лист Excel вмещает максимум 1 048 576 строк и 16 384 столбца, так что выгрузка на 3 миллиона строк просто не помещается: Excel загружает первую часть, предупреждает вас и отбрасывает остальное. Чтобы увидеть весь файл, откройте его в инструменте без такого ограничения, например в Просмотре CSV, загрузите его в модель данных Excel вместо листа, разбейте на части или обработайте в Python или базе данных.
Почему Excel обрезает файл
У самого CSV-файла нет ограничения по размеру. Это обычный текст: одна строка файла — одна строка таблицы, значения разделены запятыми или точками с запятой (если это для вас новость, прочитайте, что такое CSV-файл). Но Excel кладёт всё, что вы открываете, на лист, а у листа фиксированная сетка: 1 048 576 строк на 16 384 столбца (до столбца XFD).
Когда файл больше этой сетки, Excel показывает предупреждение, что файл загружен не полностью, и оставляет только те строки, которые поместились. Заголовок и 1 048 575 строк с данными попадают на лист; начиная со строки 1 048 577 всё пропадает из того, что вы видите на экране.
Google Таблицы здесь не спасут. У них ограничение — 10 миллионов ячеек на таблицу, считая все листы. Файл на 3 миллиона строк и 10 столбцов — это уже 30 миллионов ячеек, так что он тоже не импортируется.
Главный риск: сохранение уничтожает данные
Предупреждение легко закрыть, а то, что осталось на экране, выглядит как совершенно нормальная таблица. Опасность приходит позже:
- Вы сохраняете файл. Excel записывает обратно только то, что загрузил. Если нажать «Сохранить» в
export.csv, исходные 3 миллиона строк заменятся примерно одним миллионом — без всяких дополнительных предупреждений. - Вы считаете итоги.
СУММили сводная таблица по обрезанному листу дают правдоподобный, но неверный ответ, потому что две трети данных так и не загрузились. - Вы пересылаете файл. Коллега, получивший сохранённую копию, никак не узнает, что строк не хватает.
Если Excel уже показал предупреждение, закройте файл без сохранения и не трогайте исходную выгрузку. Затем проверьте, насколько он на самом деле большой, и только потом решайте, что делать.
Вариант 1: открыть весь файл в браузере
Если данные нужно в основном посмотреть — проверить несколько записей, найти клиента, понять, что лежит в столбце, — быстрее всего воспользоваться просмотрщиком без ограничения по сетке.
Просмотр CSV от Opener читает файл в вашем браузере и никуда его не загружает — это важно, когда в выгрузке данные клиентов или финансовая информация. Разбор идёт в фоновом потоке, а отрисовываются только строки на экране, поэтому файл на 200 000 строк открывается примерно за секунду, а файлы с миллионами строк работают на обычном ноутбуке. Практический предел — память вашего устройства, а не фиксированное число строк.
Когда файл открыт, можно:
- искать по всем столбцам прямо во время ввода;
- сортировать по любому столбцу;
- экспортировать текущий вид — с фильтром и сортировкой — в чистый CSV в UTF-8 или в JSON.
Последний пункт — удобный трюк: отфильтруйте 3 миллиона строк до 40 000, где упоминается нужный регион, экспортируйте их, и этот файл поменьше откроется в Excel без всяких предупреждений. Формулы, сводные таблицы и диаграммы просмотрщик не делает — об этом дальше.
Вариант 2: загрузить файл в модель данных Excel
Новые версии Excel для компьютера умеют импортировать CSV через Power Query (на вкладке «Данные» — «Получить данные» / «Из текстового/CSV-файла»), а не открывать его напрямую. Разница в том, куда попадают данные.
Вместо загрузки результата на лист выберите загрузку только в виде подключения и добавьте данные в модель данных. Модель данных хранит их в сжатом виде вне сетки листа, поэтому на неё не действует ограничение в 1 048 576 строк. Поверх неё можно построить сводную таблицу и подвести итоги по всем 3 миллионам строк — суммы по месяцам, количество по категориям и так далее.
Обратная сторона: пролистать строки, как на обычном листе, не получится, а точные названия пунктов меню отличаются в разных версиях Excel. Это лучший вариант, когда нужно остаться в Excel, а в итоге требуется сводка, а не построчный просмотр.
Вариант 3: посчитать, посмотреть и разбить файл в командной строке
В macOS, Linux или Windows с WSL несколько стандартных команд за секунды ответят на вопросы «какого он размера?» и «что внутри?», ничего никуда не загружая:
wc -l export.csv # количество строк файла
head -n 20 export.csv # первые 20 строк
head -n 100000 export.csv > sample.csv # выборка поменьше для экспериментов
Учтите, что wc -l считает строки файла, а не строки таблицы. Если в некоторых значениях внутри кавычек есть переносы строк (в адресах и комментариях это бывает часто), строк файла окажется больше, чем записей в таблице.
Чтобы разбить файл на части, которые откроются в Excel, — каждая со своей строкой заголовка:
tail -n +2 export.csv | split -l 1000000 - part_
for f in part_*; do
{ head -n 1 export.csv; cat "$f"; } > "$f.csv" && rm "$f"
done
Для быстрых проверок разбиение подходит, но помните о той же проблеме с переносами строк внутри кавычек: split режет по строкам файла и может разрезать многострочное значение пополам. К тому же работать с четырьмя отдельными книгами неудобно, если нужны итоги по всем сразу.
Вариант 4: анализ в pandas, SQLite или DuckDB
Если вы собираетесь считать, объединять или агрегировать, честный ответ — нормальный инструмент для работы с данными. Все перечисленные ниже справляются с десятками миллионов строк на обычном ноутбуке.
Python с pandas читает весь файл в память:
import pandas as pd
df = pd.read_csv("export.csv")
print(len(df))
print(df.groupby("region")["amount"].sum())
Если файл больше вашей оперативной памяти, читайте его частями:
total = 0
for chunk in pd.read_csv("export.csv", chunksize=500_000):
total += chunk["amount"].sum()
DuckDB умеет делать SQL-запросы прямо к CSV-файлу, без предварительного импорта:
SELECT region, COUNT(*) AS orders, SUM(amount) AS revenue
FROM 'export.csv'
GROUP BY region
ORDER BY revenue DESC;
SQLite установлен во многих системах и хорошо подходит, когда данные удобно держать в одном файле, к которому можно делать запросы:
sqlite3 sales.db
sqlite> .mode csv
sqlite> .import export.csv sales
sqlite> SELECT COUNT(*) FROM sales;
Хорошая схема работы — сделать всю тяжёлую обработку здесь, а затем записать небольшой результат — несколько тысяч строк со сводкой — обратно в CSV для Excel или отчёта.
Частые вопросы
Можно ли увеличить лимит строк в Excel?
Нет. Ограничение в 1 048 576 строк одинаково для любого листа. Его можно только обойти: загрузить данные в модель данных, разбить файл или воспользоваться другим инструментом.
Как понять, что файл обрезан?
Excel предупреждает об этом при открытии, а лист, данные на котором заканчиваются ровно на строке 1 048 576, — верный признак. Чтобы знать наверняка, проверьте размер исходного файла командой wc -l или откройте его в Просмотре CSV — он показывает общее число строк.
Может, его откроют Google Таблицы или LibreOffice?
Обычно нет. У Google Таблиц ограничение — 10 миллионов ячеек на таблицу, а у LibreOffice Calc тоже есть фиксированный максимум строк на лист. Для файлов поменьше оба варианта подходят, но выгрузке на несколько миллионов строк нужен просмотрщик, база данных или скрипт.
Безопасно ли открывать большую выгрузку клиентов в браузерном инструменте?
Зависит от инструмента. Многие онлайн-конвертеры загружают ваш файл на сервер. Opener читает файл локально в вашем браузере и ничего никуда не отправляет, так что данные остаются на вашем устройстве.