Открыть сервисСервис

Формат файлов 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
Заметили ошибку или не согласны с информацией в статье? Напишите нам support@bfometr.ru