Формат файлов Microsoft Office 2007
Jan. 7th, 2010 06:14 pm![[personal profile]](https://www.dreamwidth.org/img/silk/identity/user.png)
Я понимаю, вы сейчас скажете - "Ну, Артем, опомнился!... Баян!... Этой новости сто лет в обед!... Кто же этого не знает?...", но для меня это действительно стало открытием. Причем весьма неожиданным.
Дело в том, что по своей программерской надобности, мне нужно было на лету сгенерировать файл 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
Все.
Дело в том, что по своей программерской надобности, мне нужно было на лету сгенерировать файл Microsoft Word 2007. Если кто знаком с программированием, то знает, что раньше, в старых версиях, это делалось либо вызовом ActiveX-COM объекта, или требовало наличия установленного Офиса с нелегальным открытием Word-а в скрытом режиме, генерации необходимого текста, сохранении файла и закрытии Word-а.
Если вы не просто знакомы с программированием, а на самом деле проделывали подобные штуки, то наверняка помните, сколько геморроя приходится хапать при этом увлекательном процессе вызова Микрософтовских Interop-объектов, которые например пишут, что убиваются из памяти, а на самом деле совсем не убиваются и продолжают висеть, вызывая memory leak-и, непонятные глюки и прочие занимательные пляски вокруг монитора. Особенно все это приятно проделывать если у вас не обычная десктопная программа, а Интернет-приложение, web-service или чего-то еще.
И даже если вы не знакомы с программированием и с компьютером
Что делать, если в письме пришел файл в формате .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
Все.
no subject
Date: 2010-01-07 11:18 pm (UTC)да уж, намучался я в свое время с этим interop.excel, пока не перешел к xslt преобразованию в xmlный формат 2003 офиса.
А на опен пока рано переходить, не у всех откроет)
no subject
Date: 2010-01-09 06:27 pm (UTC)no subject
Date: 2010-01-09 06:40 pm (UTC)no subject
Date: 2010-01-09 08:59 pm (UTC)no subject
Date: 2010-01-09 06:29 pm (UTC)no subject
Date: 2010-01-09 09:00 pm (UTC)no subject
Date: 2010-01-07 11:20 pm (UTC)no subject
Date: 2010-01-07 11:26 pm (UTC)no subject
Date: 2010-01-07 11:28 pm (UTC)no subject
Date: 2010-01-07 11:38 pm (UTC)no subject
Date: 2010-01-07 11:43 pm (UTC)В таком виде доступно даже мне!!
no subject
Date: 2010-01-08 01:40 am (UTC)no subject
Date: 2010-01-09 11:21 am (UTC)Жжоте)))
Спасибо за пост. Для меня это тоже открытие )))
no subject
Date: 2010-01-07 11:27 pm (UTC)2) Как оказалось старый формат офисных файлов умеют генерить(читать-писать) скрипты на perl & PHP если хорошенько погуглить.
no subject
Date: 2010-01-07 11:28 pm (UTC)no subject
Date: 2010-01-08 05:06 am (UTC)no subject
Date: 2010-01-09 10:40 am (UTC)no subject
Date: 2010-01-09 07:38 pm (UTC)no subject
Date: 2010-01-10 07:38 am (UTC)no subject
Date: 2010-01-07 11:38 pm (UTC)no subject
Date: 2010-01-08 04:49 am (UTC)no subject
Date: 2010-01-08 12:26 am (UTC)спасибо.
фиииигасе.
no subject
Date: 2010-01-08 01:00 am (UTC)Про двухтысячку не скажу, но открытие zip-архивов в виде папок было реализовано уже в WinXP.
no subject
Date: 2010-01-08 01:25 am (UTC)no subject
Date: 2010-01-08 01:39 am (UTC)no subject
Date: 2010-01-08 01:52 am (UTC)Скажу тебе по секрету - вся Вселенная изначально представляет из себя самораспаковывающийся zip-архив, с абсолютной компрессией, к которому подобрал пароль где-то 14 миллиардов лет назад Великий Программист, которого мы все привыкли звать на три буквы.
Говорят, архивчик все еще не дораспокавался до конца..
no subject
Date: 2010-01-08 02:44 am (UTC)no subject
Date: 2010-01-08 03:03 am (UTC)Самое обидное - никто так и не научился делать правильный backup.
no subject
Date: 2010-01-08 04:32 am (UTC)вопрос, короче, такой: КАК ЭТО ВСЕ ВСПОМНИТЬ?!
no subject
Date: 2010-01-08 04:53 am (UTC)no subject
Date: 2010-01-08 04:29 am (UTC)если все мы являемся файлами, точнее, битиками или там байтами или еще чем, в этом большом архиве, есть ли способ выйти в сознание Всеобщего Компьютера или хотя бы той Операционной Системы, которая управляет всем этим?
да, и все же... может, мы просто снимся этому чуваку, который уснул за клавиатурой?!
no subject
Date: 2010-01-08 02:03 am (UTC)no subject
Date: 2010-01-08 06:50 am (UTC)З.Ы. и таки да, опен XML, который мелкософт так яростно пыталось задушить своим стандартом... =)
no subject
Date: 2010-01-08 07:53 am (UTC)А еще docx можно использовать, если надо выковырять картинку из ворда в нормальном качестве. Файл можно сохранить в docx, а потом найти нужную картинку в архиве.
no subject
Date: 2010-01-08 09:50 am (UTC)no subject
Date: 2010-01-08 11:04 am (UTC)no subject
Date: 2010-01-08 07:54 am (UTC)no subject
Date: 2010-01-08 11:13 am (UTC)он и бесплатный и более удобный чем ворд
no subject
Date: 2010-01-09 10:17 am (UTC)no subject
Date: 2010-01-09 10:22 am (UTC)no subject
Date: 2010-01-09 03:42 pm (UTC)Вы ничего не путаете, точно нашли причину ухудшения мира?
no subject
Date: 2010-01-09 03:51 pm (UTC)Конечно, никто не говорит, что это единственный или главный фактор, или что мир вообще как целое ухудшается или улучшается - но каждый раз, когда мне по почте присылают файл .docx, мне приходится думать, что с ним делать - то ли просто прочитать в 2007, то ли открыть в Гугл Докс, то ли корявым ОпенОфисом пересохранять, то ли отсылать обратно на пересохранение в общепринятом формате. А думать - это дело такое, не любим мы думать :) Ну а чтобы прислать какой-то документ, его, очевидно, сначала создать надо...
no subject
Date: 2010-01-09 09:25 pm (UTC)no subject
Date: 2010-01-09 11:13 pm (UTC)Прав Микрософт на что? На zip-формат?
Или на Open XML (обращаем особое внимание на слово опен).
no subject
Date: 2010-01-10 12:46 pm (UTC)А то так можно договориться до того, что и ntoskrnl.exe можно править в HEX-редакторе!
Я там это, просто смайл забыл поставить. Извиняюсь.
P.S. Кстати, эта удобная структура файла начисто слизана с открытого Open Document. Опенофисовский odt устроен точно так же.
Зачем такие страсти?
Date: 2010-01-10 10:31 am (UTC)no subject
Date: 2010-02-03 02:41 pm (UTC)no subject
Date: 2010-02-10 01:37 pm (UTC)no subject
Date: 2010-10-30 09:01 am (UTC)