Общие сведения о двоичном формате файлов Excel MS-XLS (машинный перевод)
Данная статья переведена с помощью машинного перевода, см. Отказ от ответственности. Используйте английский вариант этой статьи, который находится здесь, в качестве справочного материала.
Аннотация. Рассматривается двоичный формат файлов MS-XLS, который используется в ранее выпущенных продуктах Microsoft Excel. В статью включены сведения об основных структурах и ключевые концепции для программного взаимодействия с данным форматом файлов.
Дата последнего изменения: 23 июня 2011 г.
Применимо к: Excel | Excel 2010 | Office 2007 | Office 2010 | SharePoint Server 2010 | VBA
В этой статье Общие сведения о двоичном формате файла MS XLS Заключение Дополнительные ресурсы
**Относится к:**Microsoft Office Excel 2003 | Microsoft Excel 2002 г. | Microsoft Excel 2000 | Microsoft Excel 97
Публикации: Февраль 2011 | По: Корпорация Майкрософт
Содержание
Общие сведения о двоичном формате файла MS XLS
Основные компоненты формата MS XLS
Извлечение данных из файлов Excel
В данной статье описываются структуры и некоторые процедуры для работы с файлами MS XLS. Он является частью серии статей, которые вводят формат двоичного файла, используемый Microsoft Office продуктов. Эти статьи предназначены для использования в сочетании с Office File Format Documents в MSDN.
Общие сведения о двоичном формате файла MS XLS
Формат двоичных файлов MS XLS используется Microsoft OfficeExcel 2003 г., Microsoft Excel 2002 г., Microsoft Excel 2000 и Microsoft Excel 97. Формат состоит из потоков и потоков. Каждый лист электронной таблицы хранятся в собственной подпотоков. Все данные, содержащиеся в записи, содержащие заголовки, дающие записей типа и длины. Записи ячейки, которые содержат реальные данные ячеек, а также формулы в ячейке свойства, находящиеся в ячейке таблицы. Строковые значения не хранятся записи ячейки, но в таблице общей строки, которая ссылается на ячейку записи. Записи строки содержат сведения о свойствах для ячеек, строк и ячеек. Только ячейки, содержащие данные или форматирование отдельных хранятся в подпотоков.
Microsoft Office Excel 2007 использует MS-XLSB binary file format. Этот формат аналогичен MS XLS, но явно не рассматривается в данной статье.
Основные компоненты формата MS XLSФормат файла MS XLS содержит потоки, потоков и records. Все записи в документ MS XLS начинаются с 2-байтовое целое число без знака для указания типа записи, а другой для размер записи. Запись не может превышать 8224 байт. В случае больше данных, запись относится к остальной хранится в один или несколько continue records.
Ниже приведены основные потоки, потоков и записи в файл формата MS XLS.
Поток Workbook является основной поток в XLS-файла. Он содержит несколько потоков, каждый из которых начинается с начала файла (BOF) записи и заканчивается на запись в конец файла (EOF). Первый поток всегда подпотоков Globals, а остальные подпотоки sheet. К ним относятся листы, листы макросов, листы диаграмм, листы диалогов и листы модулей VBA.
Globals подпотоков определяет глобальные свойства и данные в книге. Он также включает BoundSheet8 запись для каждого подпотоков Workbook поток.
Запись BoundSheet8 сведения о подпотоков листа. Это включает в себя имя, расположение, тип и видимости. Первые 4 байта для записи, lbPlyPos FilePointer указывает позицию в потоке Workbook, которой начинается подпотоков листа.
Worksheet подпотоков указывает листа в книге.
В таблице ячейка является частью потока лист, где хранятся ячейки. Он содержит ряд строк блоков, каждый из которых обладает емкостью 32 строк ячеек и заполняются последовательно. Каждый блок строка начинается с серии записей Row , следуют ячейки, перейдите в строках, и заканчивается DBCell записи, которая дает начальное смещение первой ячейки каждой строки в блоке.
Запись Row определение строки в таблицу. Это представляет собой сложную структуру, но первые 6 байт необходимы для получения основных содержимого. Это позволяет индекс строки и столбцы первой и последней ячейки, содержащие данные или уникального форматирования строки.
Все ячейки в строке блока сохраняются после последней строки в блоке. Существует семь типов записей, представляющих фактические ячейки на листе. Большинство записей ячейки начинаются с 6-байтного Cell структуру. Первые 2 эти байты указать строку, следующие два байта указать столбец, а последние 2 байта укажите записи XF в подпотоков Globals, который содержит сведения о форматировании.
Следующие записи представляют различные виды ячеек. Если не указано иное, первые 6 байтов занимаемое структуру ячеек, а оставшиеся байты содержат значения.
Запись ячейки Blank задает пустую ячейку, которая не имеет формулы или значения. Этот тип записи используется только для ячеек, содержащих отдельные форматирования; в противном случае пустых ячеек хранятся в записях MulBlank или вообще.
Запись RK ячейка содержит 32-разрядное число. Excel автоматически преобразует числа, которые могут быть представленными в 32 бит или меньше, в этот формат для хранения как способ уменьшить размер файла. Вместо структуры ячейки 6 байтов первые 2 байта определяют строку и второй 2 байта указать столбец. Оставшиеся 6 байт определяют номер в структуре RkRec для оптимизации диска и памяти.
Запись ячейки BoolErr содержит структуру Bes 2-байтовое значение типа Boolean или код ошибки.
Запись Number ячейка содержит 64-разрядное число с плавающей запятой.
Запись LabelSst ячейка содержит 4-байтовое целое число, которое указывает строку в таблице общих строк (SST). В частности целое число, которое соответствует индекс массива в поле RGB SST.
Запись ячейка Formula содержит формулу и полученные данные. В структуре FormulaValue в 8 байт, которые следуют за структуру ячеек определяется значением, отображаемым в ячейке. Следующие 6 байт может игнорируются, а остальная часть записи является CellParsedFormula структуру, содержащую сама формула.
Запись MulBlank задает набор пустых ячеек в строке.
Первые 2 байта новой строки и следующие два байта предоставить столбец, который начинается последовательность пробелов. Далее следует за переменной длины массива структур cell для хранения сведений о форматировании и последние 2 байта Показать столбец серии пустые ячейки заканчивается на.
Запись MulRk подобно MulBlank записи, но вместо пустых ячеек, MulRk запись состоит из RK данных в структуры RkRec.
Общие строки таблицы (SST) содержит все строковые значения в книге. Эти значения ссылается на листе LabelSst записи ячейки. Первые 8 байт SST предоставить номер ссылки на строки в книге и количество уникальных строковых значений в SST. Остальные представляет собой массив структур XLUnicodeRichExtendedString, содержащих строки, сами по себе в виде массивов знаков. 16 Бит эта структура определяет, должны ли символы 1 байт или 2 байта. SST структура и структура XLUnicodeRichExtendedString можно расширить с помощью Continue записей, если номер или длина строки превышает их границ.
Извлечение данных из файлов ExcelВсе содержимое файла формата MS XLS живет в подпотоки листа. Несмотря на то, что удалось загрузить каждый лист подпотоков беспорядочно, получить большую управляемость и эффективность с помощью BoundSheet8 записей для поиска только листы, которые требуется прочитать. Следующая процедура показывает, как доступ ко всем данным из листа.
Разбор формул и сведения о форматировании, выходит за рамки данной статьи.
Для чтения содержимого листа ExcelСоздайте внутреннюю структуру данных для хранения содержимого листа.
Определение объектов для представления каждого из типов записей восемь ячейку в памяти.
Откройте поток Workbook и сканирование для первого экземпляра BOF записи. Это начало подпотоков Globals.
Чтение подпотоков Globals, загрузка записей BoundSheet8 и SST в памяти. Более подробные сведения содержатся в разделе Globals.
От BoundSheet8 запись, которая соответствует подпотоков, нужно открыть, прочитать первые 4 байта, который содержит lbPlyPos FilePointer.
Перейти на смещение в поток, указанный по lbPlyPos FilePointer. Это BOF запись журнала.
Прочитать следующую запись в подпотоков, являющийся записью Index, и загрузить массив указателей, который начинается с byte 16 Index записи. Каждый указатель ссылается на позицию в потоке записи DBCell.
Для каждого указателя в массиве:
Прочитайте соответствующую запись DBCell.
Перейдите на смещение, указанное по 5-6 байтов, DBCell записи и считывания в память все записи ячейки, на данный момент начала и окончания с последнего байта до DBCell.
Скопируйте ячейку записи в объекты, определенные в структуре внутренние данные по типу записи.
Анализ данных ячейки.
Заключение
Это только выборка MS XLS формат файла. С помощью средств, имеющихся в этой статье, простого восстановления должна быть в пределах аудитории. С помощью дополнительных исследований вы можете восстановить формулы, сведения о форматировании и другие метаданные. И в конечном итоге даже операции сохранения станет возможным.
Дополнительные ресурсы
Дополнительные сведения см. в следующих документах, в которых описывается: