sly2m (sly2m) wrote,
sly2m
sly2m

Categories:

Формат файлов 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

Все.

Tags: код, компьютеры, фшоке
Subscribe
  • Post a new comment

    Error

    Anonymous comments are disabled in this journal

    default userpic

    Your IP address will be recorded 

  • 49 comments
Previous
← Ctrl ← Alt
Next
Ctrl → Alt →
Previous
← Ctrl ← Alt
Next
Ctrl → Alt →