Формат файлов XLS¶
XLS — расширение файла электронных таблиц, созданного в ранних версиях табличного процессора Microsoft Excel (версии 5.0 и 97–2003). Формат основан на проприетарной структуре Compound File Binary Format (CFBF) и является бинарным, то есть данные в нём хранятся в закодированном машинном виде, а не в виде читаемого текста. До появления формата XLSX (введённого в Office 2007) XLS был основным форматом электронных таблиц в продуктах Microsoft и де-факто стандартом обмена табличными данными в Windows-среде.
¶Техническая основа
Файл XLS представляет собой контейнер Compound File Binary Format (также известный как OLE 2 Structured Storage). Внутри одного файла сосуществуют несколько логических потоков (stream), каждый из которых отвечает за свою часть данных:
| Поток | Назначение |
|---|---|
| Workbook | Основные данные книги: листы, ячейки, формулы, форматирование |
| SummaryInformation | Метаданные: автор, дата создания, название документа |
| DocumentSummaryInformation | Дополнительные метаданные: количество листов, приложения |
| CompObj | Информация о типе объекта для OLE-взаимодействия |
Данные внутри потока Workbook организованы в виде последовательности записей (records). Каждая запись состоит из двухбайтового идентификатора типа, двухбайтовой длины и полезной нагрузки. Такая структура позволяет хранить разнородную информацию: значения ячеек (числа, строки, формулы), объединённые ячейки, стили, диаграммы, макросы VBA.
¶Структура данных
Внутри XLS применяется система «богатых» форматов (Rich Text) и сжатия. Текстовые строки хранятся в двух вариантах кодировки: однобайтовой (кодовые страницы Windows) и двухбайтовой Unicode. Числовые значения ячеек записываются как 8-байтовые числа с плавающей точкой IEEE 754. Формулы хранятся в виде компилированного стекового представления: операнды и операторы кодируются в обратной польской записи, что позволяет вычислять их без повторного разбора текста формулы.
Файл может содержать листы четырёх типов: рабочие листы (worksheets), листы диаграмм (chart sheets), листы макрокоманд (macro sheets) и листы диалоговых окон. Количество листов в формате ограничено 65 536 строк и 256 столбцов на лист — ограничения, связанные с использованием 16-битных адресов ячеек.
¶История и развитие
Формат XLS появился в 1995 году вместе с выходом Microsoft Excel 5.0. Ранние версии Excel (до 5.0) использовали собственные, несовместимые между собой форматы. С версии Excel 97 формат был стандартизирован в документе Microsoft Open Specification (MS-XLS) и оставался неизменным до выхода Office 2007.
В 2007 году Microsoft представила новый формат XLSX, основанный на стандартах Office Open XML (OOXML, ISO/IEC 29500). В отличие от бинарного XLS, XLSX представляет собой ZIP-архив, содержащий XML-файлы с данными. Это сделало формат открытым, компактным и устойчивым к повреждениям. Формат XLS сохранён в Excel для совместимости, но считается устаревшим.
¶Совместимость и ограничения
Основные ограничения классического XLS:
- не более 65 536 строк и 256 столбцов на лист;
- общий размер файла ограничен 2 ГБ;
- поддерживается не более 255 листов в книге;
- формат проприетарный: спецификация полностью раскрыта только в документации Microsoft.
Для чтения и записи XLS без использования Microsoft Excel применяются сторонние библиотеки: Apache POI (Java), xlrd и openpyxl (Python), SpreadsheetGear, Gnumeric. Многие офисные пакеты — LibreOffice Calc, OpenOffice Calc, OnlyOffice — открывают и сохраняют файлы XLS.
¶Безопасность
Бинарная природа XLS создаёт ряд рисков. Файл может содержать макросы VBA, выполняющие произвольный код при открытии книги. Кроме того, формат подвержен уязвимостям парсинга: многочисленные уязвимости в обработчиках XLS были обнаружены в Microsoft Excel и сторонних библиотеках, некоторые из них использовались в целевых атаках. По этой причине в корпоративной среде нередко ограничивается открытие файлов XLS с внешними ссылками и макросами.
¶Применение
Несмотря на устаревание, XLS продолжает использоваться в обмене данными: в бухгалтерских системах, шаблонах, выгрузках из баз данных и отчётности. Многие российские учётные системы (1С:Предприятие, «Диадок») поддерживают выгрузку в XLS. Для передачи данных между системами чаще применяются более открытые форматы — CSV, XLSX, ODS.
Источники:
- Microsoft Open Specification — MS-XLS: Microsoft Excel Binary File Format
- ISO/IEC 29500:2016 — Office Open XML
- Документация Apache POI — HSSF and XSSF Users Guide
- Документация Python Software Foundation — xlrd, openpyxl
