Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

*.xls и *.doc (Внутрення структура файлов) [D7]


Wolferio ©   (2005-09-14 17:27:00) 

Добрый день!
У меня возник такой вопрос. Как роспознать форматы типа *xls и *.doc, если по внутренней структуре они одинаковы (начинаються они  с байтов: 1 - $D0,2 - $CF,3 - $11,4 - $E0), не учитывая их росширение.
Спасибо.


Суслик   (2005-09-15 11:40:00) [1]

defunct
нет бы по делу что-то ответил


Defunct   (2005-09-15 04:31:00) [2]

> (дело в том, что до сей поры я только создавал biff8, но похоже нужно будет и читать)

Чукча не читатель, чукча - писатель? ;>


Суслик   (2005-09-14 19:08:00) [3]

Кстати может удасться надыбать тут хорошую доку по biff8?
Есть у кого более детальная чем та, которую дают open office?

(дело в том, что до сей поры я только создавал biff8, но похоже нужно будет и читать)


KilkennyCat   (2005-09-14 19:07:00) [4]


> Как мне програмно определить сколько байт в файле(В нутри
> его.)


имеетсмя ввиду что? полезной информации?


> [9] Суслик ©   (14.09.05 19:03)
> да не придирайся к словам и все.


ок :)


Суслик   (2005-09-14 19:03:00) [5]

да не придирайся к словам и все.
ясно, что биф никоего отношения к оле не имеет.
Просто биф (как формат данных) они (MS) сохраняют на дистке используя ole.

-------
Описанного явления в excel не замечал.


KilkennyCat   (2005-09-14 19:02:00) [6]


> [7] Суслик ©   (14.09.05 18:57)

Буду :)
Начиная с пятой версии екселя (бифф5, а не бифф8 :) ) происходит инкапсуляция (выдрал из статьи, сам это слово не использую) биффа в оле2.
Но есть хитрость - это не всегда. Когда я разбирал побайтно ексель и ворд, я замечал, что при определенных условиях они сохраняют файл в первородном формате.


Суслик   (2005-09-14 18:57:00) [7]


>  [6] KilkennyCat ©   (14.09.05 18:52)

Не придирайся к словам :)


KilkennyCat   (2005-09-14 18:52:00) [8]


> Если имеется в виду последние (biff8 или biff8x), то они
> сделаны на основе ole storage.


не верно. Оле - это оле. Бифф - это бифф.


Суслик   (2005-09-14 18:00:00) [9]


>  [3] Wolferio ©   (14.09.05 17:54)

странный ты, я же тебе объяснил все - данные самого excel лежат внутри структуры ole stream, которая может иметь произвольный формат. Читай файл ты ничего не добъешься. Нужно читать ole stream.


Суслик   (2005-09-14 17:59:00) [10]

Типа такого
var
  kW: WideString;
  kStorage: IStorage;
  kStream: IStream;
  kId: Word;
  kCount: LongInt;
begin
  kW := WideString('e:\temp\книга1.xls');
  try
     OleCheck(StgOpenStorage(PWideChar(kW), nil,
        STGM_READ or STGM_SHARE_EXCLUSIVE,  nil,  0,  kStorage));
     OleCheck(kStorage.OpenStream('Workbook',  nil,
        STGM_READ or STGM_SHARE_EXCLUSIVE,  0,  kStream));
     OleCheck(kStream.Read(@kId, SizeOf(kId), @kCount));
  except
     ShowMessage('not excel');
     abort();
  end;

  if kid = $0809 then
     ShowMessage('excel')
  else
     ShowMessage('not excel')
end;


Wolferio   (2005-09-14 17:54:00) [11]

Но если определять по внутренней структуре файла, видно что первых 4 байта они одинаковы. Но можна прочиталь *.doc файл с зади (Microsoft Word). Вопрос: Как мне програмно определить сколько байт в файле(В нутри его.)


Суслик   (2005-09-14 17:48:00) [12]

смотря какая версия excel.
У них их много. Если имеется в виду последние (biff8 или biff8x), то они сделаны на основе ole storage. То что ты видишь - это данные не самого екселя, а данные ole storage.

Если открыть файл excel как ole stream, то из него можно читать данные.
Формат устроен на основе т.н. записей - заголовк (2 байта, кажется) и данные. Запиши идут последовательно. Первой записью идет BOF. Ее id = $0809.

Как сделано для word - не знаю, но полагаю, что также.

Информация взята из документации с сайта openoffice.org. Откуда конкретно брал не помню - ищи и будет тебе счастье.

PS. Разбараться с Ole storage нужно в msdn по ключевым словам Istram и IStorage. Можешь также поискать реализации использования данных интерфейсов.


Wolferio   (2005-09-14 17:47:00) [13]

Ну кто нибуть мне поможет?


Наверх

Титульная страница Поиск, карта сайта Написать письмо