sly2m: (Default)
sly2m ([personal profile] sly2m) wrote2010-01-07 06:14 pm

Формат файлов Microsoft Office 2007

Я понимаю, вы сейчас скажете - "Ну, Артем, опомнился!... Баян!... Этой новости сто лет в обед!... Кто же этого не знает?...", но для меня это действительно стало открытием. Причем весьма неожиданным.

Дело в том, что по своей программерской надобности, мне нужно было на лету сгенерировать файл Microsoft Word 2007. Если кто знаком с программированием, то знает, что раньше, в старых версиях, это делалось либо вызовом ActiveX-COM объекта, или требовало наличия установленного Офиса с нелегальным открытием Word-а в скрытом режиме, генерации необходимого текста, сохранении файла и закрытии Word-а.

Если вы не просто знакомы с программированием, а на самом деле проделывали подобные штуки, то наверняка помните, сколько геморроя приходится хапать при этом увлекательном процессе вызова Микрософтовских Interop-объектов, которые например пишут, что убиваются из памяти, а на самом деле совсем не убиваются и продолжают висеть, вызывая memory leak-и, непонятные глюки и прочие занимательные пляски вокруг монитора. Особенно все это приятно проделывать если у вас не обычная десктопная программа, а Интернет-приложение, web-service или чего-то еще.

И даже если вы не знакомы с программированием и с компьютером на "Вы" на "Ты" на "Шо?", наверняка замечали, что с недавних пор офисные документы вместо привычных форматов .doc и .xls стали приходить с незнакомыми расширениями .docx и .xlsx, которые не открываются нормальным Офисом, а обязательно требуют наличия нового Microsoft Office 2007 (это который с корявым интерфейсом, без привычного меню и с непонятными иконками).

Что делать, если в письме пришел файл в формате .docx, а Microsoft Office 2007 на компьютере не установлен? Ну, в принципе, можно скачать в Интернете всякие бесплатные перекодировщики, утилиты и так далее. Но все оказалось гораздо проще.



Файл с расширением .docx (Word 2007) или .xlsx (Excel 2007) это обычный zip-архив. Т.е. его можно без всяких проблем переименовать из .docx в .zip, наплевав на строгие предупреждения Виндовза, что "ай-ай-ай, что же вы делаете, ему же больно!", и открыть стандартным архиватором типа WinRar, WinZip (если я не ошибаюсь, начиная с версии Vista, винда может открыть архивы zip и стандартным проводником).

В архиве вы увидите несколько папок, по которым разложено содержание вашего документа, все картинки из текста в одной папке, сам текст в другой, шаблоны в третьей и так далее.
Это, кстати, еще и удобный способ быстро выдрать картинки из большого документа, даже если у вас есть возможность его открыть самим Word-ом.

Правда текст лежит не в привычном формате .txt, а в формате .xml (если быть точнее Open XML), но его легко можно открыть любым текстовым редактором (тем же Notepad.exe) или Internet Explorer-ом. Документ вполне можно прочесть и даже перетащить параграфы через копирование в буфер куда-нибудь в более доступный редактор.


Если же вернуться к к вопросу программной генерации файлов Word или Excel на лету, то теперь, оказывается, нет даже необходимости в наличии установленного на компьютере Офиса. Что в западных странах означает - нет нужды еще в одной лицензии, предназначенной не для пользования человеком, а для компьютерной программы, что вообще само по себе - нонсенс.

Просто сгенерировал нужный текст и сохранил его (хотя бы даже как текстовый файл - построчно) в виде .xml, потом положил все файлы в нужном порядке в нужные папки, зазиповал их используя какой-нибудь бесплатный dll-зиповщик, например ICSharpCode.SharpZipLib (гуглится) и переименовал получившийся файл в .docx

Все.

[identity profile] igorbasic.livejournal.com 2010-01-07 11:18 pm (UTC)(link)
Ну, Артем, опомнился!... Баян!
да уж, намучался я в свое время с этим interop.excel, пока не перешел к xslt преобразованию в xmlный формат 2003 офиса.
А на опен пока рано переходить, не у всех откроет)

[identity profile] manzana07.livejournal.com 2010-01-07 11:20 pm (UTC)(link)
О боже... Это что-то за гранью понимания...

[identity profile] xtraway.livejournal.com 2010-01-07 11:27 pm (UTC)(link)
1) Microsoft Office Compatibility Pack for Word, Excel, and PowerPoint File Formats отсюда http://www.microsoft.com/downloads/details.aspx?familyid=941b3470-3ae9-4aee-8f43-c6bb74cd1466&displaylang=en позволит открывать файлы офиса 2007 из офиса 2000-2003.

2) Как оказалось старый формат офисных файлов умеют генерить(читать-писать) скрипты на perl & PHP если хорошенько погуглить.

[identity profile] natalianyc.livejournal.com 2010-01-07 11:38 pm (UTC)(link)
А в Google Docs открыть нельзя их?

[identity profile] ostrovska.livejournal.com 2010-01-08 12:26 am (UTC)(link)
фигасе.
спасибо.
фиииигасе.

[identity profile] androld.livejournal.com 2010-01-08 01:00 am (UTC)(link)
> (если я не ошибаюсь, начиная с версии Vista, винда может открыть архивы zip и обычным проводником).
Про двухтысячку не скажу, но открытие zip-архивов в виде папок было реализовано уже в WinXP.

[identity profile] dim-alf.livejournal.com 2010-01-08 01:25 am (UTC)(link)
офигенно! Респект за находку!

[identity profile] vplusplus.livejournal.com 2010-01-08 01:39 am (UTC)(link)
очень круто :)

[identity profile] plotnick.livejournal.com 2010-01-08 01:52 am (UTC)(link)
Вообще очень частая ситуация. Привычные вродле бы вещи оказываются на самом деле zip-файлами.

Скажу тебе по секрету - вся Вселенная изначально представляет из себя самораспаковывающийся zip-архив, с абсолютной компрессией, к которому подобрал пароль где-то 14 миллиардов лет назад Великий Программист, которого мы все привыкли звать на три буквы.
Говорят, архивчик все еще не дораспокавался до конца..

[identity profile] ctype.livejournal.com 2010-01-08 02:03 am (UTC)(link)
да. в свое время делал это через com. удовольствия мало, хотя самое напряженное было работать с этим уг из под iis на 2003 винде ...

[identity profile] bobr-com.livejournal.com 2010-01-08 06:50 am (UTC)(link)
ога, я это тож когда-то случайно надыбал. но по простоте душевной, решил, что это у меня или коммандер такой навороченный, что по ctrl+pgdwn .docx как архив открыл, либо этот самый охвес какую-то приблуду мелкософтофскую в системе повесил(на манер какого-нить КОМ-сервера), которая всигда запущена и позволяе такое вот проделывать с этими файло. а как глянул по папкам по этим - матерь божия - там же ш все, вплоть до использовавшейся темы дизайна ворда-екселя 2007 расписано, а того, чего бы действительно нужно, два с половиной файло. имхо.
З.Ы. и таки да, опен XML, который мелкософт так яростно пыталось задушить своим стандартом... =)

[identity profile] jenyay.livejournal.com 2010-01-08 07:53 am (UTC)(link)
Проще всего поставить пакет совместимости для 2003-го офиса, который лежит на сайте MS. Тогда 2003 офис сможет и читать, и создавать docx.

А еще docx можно использовать, если надо выковырять картинку из ворда в нормальном качестве. Файл можно сохранить в docx, а потом найти нужную картинку в архиве.

[identity profile] jenyay.livejournal.com 2010-01-08 07:54 am (UTC)(link)
Кстати, формат OpenOffice тоже такой же архив.

[identity profile] loy-iever.livejournal.com 2010-01-08 11:13 am (UTC)(link)
OpenOffice'ом последним без проблем открываются и .docx и .xlsx
он и бесплатный и более удобный чем ворд

[identity profile] sivka-krd.livejournal.com 2010-01-09 10:17 am (UTC)(link)
В сие таинство случайно проник, получив файл без расширения..

[identity profile] darth-vasya.livejournal.com 2010-01-09 10:22 am (UTC)(link)
Ну вот зачем вы это написали? Мир и так становится хуже с каждым новым созданным документом Office 2007, а вы мало того, что сам их пачками генерите, как выясняется, - так ещё и публикуете инструкции о том, как другим это делать! ;-(

[identity profile] http://openid.yandex.ru/dxnich/ (from livejournal.com) 2010-01-09 09:25 pm (UTC)(link)
А описанная процедура не будет нарушением авторских прав Microsoft?

Зачем такие страсти?

[identity profile] vadim-i-z.livejournal.com 2010-01-10 10:31 am (UTC)(link)
Скачайте это (http://www.microsoft.com/downloads/details.aspx?displaylang=en&FamilyID=941b3470-3ae9-4aee-8f43-c6bb74cd1466) и решите проблему раз и навсегда.

[identity profile] elstan.livejournal.com 2010-02-03 02:41 pm (UTC)(link)
Спасибо! Не знал.

(Anonymous) 2010-02-10 01:37 pm (UTC)(link)
очень интересно, спасибо. Кстати, в Википедии (http://ru.wikipedia.org/wiki/Docx) про это не написано...

[identity profile] ivanychept.livejournal.com 2010-10-30 09:01 am (UTC)(link)
Image (http://shareimage.ru/4ccbb3f8/262505_pravdaspasetmir.jpg.html)