Entry tags:
Формат файлов 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
Все.
Дело в том, что по своей программерской надобности, мне нужно было на лету сгенерировать файл 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
да уж, намучался я в свое время с этим interop.excel, пока не перешел к xslt преобразованию в xmlный формат 2003 офиса.
А на опен пока рано переходить, не у всех откроет)
no subject
no subject
no subject
2) Как оказалось старый формат офисных файлов умеют генерить(читать-писать) скрипты на perl & PHP если хорошенько погуглить.
no subject
no subject
no subject
no subject
no subject
В таком виде доступно даже мне!!
no subject
спасибо.
фиииигасе.
no subject
Про двухтысячку не скажу, но открытие zip-архивов в виде папок было реализовано уже в WinXP.
no subject
no subject
no subject
no subject
Скажу тебе по секрету - вся Вселенная изначально представляет из себя самораспаковывающийся zip-архив, с абсолютной компрессией, к которому подобрал пароль где-то 14 миллиардов лет назад Великий Программист, которого мы все привыкли звать на три буквы.
Говорят, архивчик все еще не дораспокавался до конца..
no subject
no subject
no subject
Самое обидное - никто так и не научился делать правильный backup.
no subject
если все мы являемся файлами, точнее, битиками или там байтами или еще чем, в этом большом архиве, есть ли способ выйти в сознание Всеобщего Компьютера или хотя бы той Операционной Системы, которая управляет всем этим?
да, и все же... может, мы просто снимся этому чуваку, который уснул за клавиатурой?!
no subject
вопрос, короче, такой: КАК ЭТО ВСЕ ВСПОМНИТЬ?!
no subject
no subject
no subject
no subject
З.Ы. и таки да, опен XML, который мелкософт так яростно пыталось задушить своим стандартом... =)
no subject
А еще docx можно использовать, если надо выковырять картинку из ворда в нормальном качестве. Файл можно сохранить в docx, а потом найти нужную картинку в архиве.
no subject
no subject
no subject
no subject
он и бесплатный и более удобный чем ворд
no subject
no subject
no subject
no subject
Жжоте)))
Спасибо за пост. Для меня это тоже открытие )))
no subject
Вы ничего не путаете, точно нашли причину ухудшения мира?
no subject
Конечно, никто не говорит, что это единственный или главный фактор, или что мир вообще как целое ухудшается или улучшается - но каждый раз, когда мне по почте присылают файл .docx, мне приходится думать, что с ним делать - то ли просто прочитать в 2007, то ли открыть в Гугл Докс, то ли корявым ОпенОфисом пересохранять, то ли отсылать обратно на пересохранение в общепринятом формате. А думать - это дело такое, не любим мы думать :) Ну а чтобы прислать какой-то документ, его, очевидно, сначала создать надо...
no subject
(Anonymous) 2010-01-09 06:27 pm (UTC)(link)no subject
no subject
no subject
no subject
no subject
no subject
no subject
Прав Микрософт на что? На zip-формат?
Или на Open XML (обращаем особое внимание на слово опен).
no subject
Зачем такие страсти?
no subject
А то так можно договориться до того, что и ntoskrnl.exe можно править в HEX-редакторе!
Я там это, просто смайл забыл поставить. Извиняюсь.
P.S. Кстати, эта удобная структура файла начисто слизана с открытого Open Document. Опенофисовский odt устроен точно так же.
no subject
no subject
(Anonymous) 2010-02-10 01:37 pm (UTC)(link)no subject