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

Дело в том, что по своей программерской надобности, мне нужно было на лету сгенерировать файл 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

Все.

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

Date: 2010-01-09 06:27 pm (UTC)
From: (Anonymous)
Опен, если речь об открытии на чужих машинах, умеет в один клик делать PDF - в отличие от (в первый раз ставил его себе именно по этому поводу). Вообще, давно пора пиплу отучаться слать друг другу во вложениях хоть doc-и, хоть docx-ы.

Date: 2010-01-09 06:40 pm (UTC)
From: [identity profile] magnat.livejournal.com
Пардон, не залогинился :)

Date: 2010-01-09 08:59 pm (UTC)
From: [identity profile] igorbasic.livejournal.com
я про openXml

Date: 2010-01-09 06:29 pm (UTC)
From: [identity profile] jungehexe.livejournal.com
3.1 вполне все это открывает

Date: 2010-01-09 09:00 pm (UTC)
From: [identity profile] igorbasic.livejournal.com
я про openXml

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

Date: 2010-01-07 11:26 pm (UTC)
From: [identity profile] sly2m.livejournal.com
Ворд знаешь, ZIP слышала?

Date: 2010-01-07 11:38 pm (UTC)
From: [identity profile] sly2m.livejournal.com
Вот. Если в двух словах, то теперь это одно и то же.

Date: 2010-01-07 11:43 pm (UTC)
From: [identity profile] manzana07.livejournal.com
Спасибо! Image (http://smiles2k.net/lol_smiles/3/index.html)
В таком виде доступно даже мне!!

Date: 2010-01-08 01:40 am (UTC)
From: [identity profile] vplusplus.livejournal.com
этой веткой вы оба просто порвали %))) в хорошем смысле :))))

Date: 2010-01-09 11:21 am (UTC)
From: [identity profile] mazarini.livejournal.com
Аааааааааааааа )))

Жжоте)))

Спасибо за пост. Для меня это тоже открытие )))

Date: 2010-01-07 11:27 pm (UTC)
From: [identity profile] xtraway.livejournal.com
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 если хорошенько погуглить.

Date: 2010-01-07 11:28 pm (UTC)
From: [identity profile] igorbasic.livejournal.com
ну не распространеть же его вместе с ПО:-)

Date: 2010-01-08 05:06 am (UTC)
From: [identity profile] vovney.livejournal.com
1) да-да, только им и пользуемся.

Date: 2010-01-09 10:40 am (UTC)
From: [identity profile] yeziz.livejournal.com
да и опен-офис их открывает заздрасьти

Date: 2010-01-09 07:38 pm (UTC)
From: [identity profile] irina-zubkova.livejournal.com
Мой Опен Офис - не открывает.

Date: 2010-01-10 07:38 am (UTC)
From: [identity profile] yeziz.livejournal.com
старенький, наверное?

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

Date: 2010-01-08 04:49 am (UTC)
From: [identity profile] mordekhai.livejournal.com
Да, конечно.

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

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

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

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

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

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

Date: 2010-01-08 02:44 am (UTC)
From: [identity profile] sly2m.livejournal.com
Интересная тема. Много есть вариантов происхождения Большого Взрыва, но такого я еще не слышал...

Date: 2010-01-08 03:03 am (UTC)
From: [identity profile] plotnick.livejournal.com
Да, кстати Великий Мануал гласит, что архивчик нужно использовать "as is" и какбе Система не застрахована от всяческих багов. Некоторые утверждают, что вот-вот потребуется Великий Ребут, а то и вовсе Великий format c:
Самое обидное - никто так и не научился делать правильный backup.

Date: 2010-01-08 04:32 am (UTC)
From: [identity profile] vplusplus.livejournal.com
вот! в этом вся и фишка! если каждый из нас — только информация на компьютере, то формат це-це нам грозит уничтожением. Но вот если мы — это сам компьютер, то что бы ни происходило, мы никуда не денемся. А кто тогда тот, кто на кнопки нажимает, не мы ли на самом деле? Т.е. сознание программиста и компьютера не является чем-то неразрывным и единым целом по сути, когда только кажется, что это две раздельные части — один большой Программист и его Компьютер в тысячах и миллиардах проявлений, и как железо, и как файл?

вопрос, короче, такой: КАК ЭТО ВСЕ ВСПОМНИТЬ?!

Date: 2010-01-08 04:53 am (UTC)
From: [identity profile] plotnick.livejournal.com
Gosh... Dude... What kind'a pot did you smoke? Try to get some shrums next time. At least they not so toxic, I guess...

Date: 2010-01-08 04:29 am (UTC)
From: [identity profile] vplusplus.livejournal.com
а вот такой вопрос: а сам Великий Программист откуда взялся и чем является тот компьютер, в котором он запаковал этот ZIP? его как-то можно осознать? :)

если все мы являемся файлами, точнее, битиками или там байтами или еще чем, в этом большом архиве, есть ли способ выйти в сознание Всеобщего Компьютера или хотя бы той Операционной Системы, которая управляет всем этим?

да, и все же... может, мы просто снимся этому чуваку, который уснул за клавиатурой?!

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

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

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

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

Date: 2010-01-08 09:50 am (UTC)
From: [identity profile] dim-alf.livejournal.com
самая главная проблема пакета совместимости - его надо ставить. Либо вы распространяете его вместе с программой, а это автоматически увеличивает дистрибутив на 15 мб, либо надеетесь что у пользователя он уже стоит, а это идеологически неправильно.

Date: 2010-01-08 11:04 am (UTC)
From: [identity profile] jenyay.livejournal.com
Это и имею в виду с точки зрения пользователя, когда надо открыть docx. Кстати, еще вопрос могут ли разработчики включать этот пакет в свой дистрибутив, не нарушит ли это лицензию.

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

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

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

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

Date: 2010-01-09 03:42 pm (UTC)
From: [identity profile] sly2m.livejournal.com
Мир становится хуже с каждым новым созданным документом Offcie 2007?
Вы ничего не путаете, точно нашли причину ухудшения мира?

Date: 2010-01-09 03:51 pm (UTC)
From: [identity profile] darth-vasya.livejournal.com
Конечно, становится хуже, вы сами совершенно верно это отметили! Поскольку в нормальном офисе оно не открывается, а пробная версия 2007 после пробного периода вообще неоперабельна.

Конечно, никто не говорит, что это единственный или главный фактор, или что мир вообще как целое ухудшается или улучшается - но каждый раз, когда мне по почте присылают файл .docx, мне приходится думать, что с ним делать - то ли просто прочитать в 2007, то ли открыть в Гугл Докс, то ли корявым ОпенОфисом пересохранять, то ли отсылать обратно на пересохранение в общепринятом формате. А думать - это дело такое, не любим мы думать :) Ну а чтобы прислать какой-то документ, его, очевидно, сначала создать надо...

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

Date: 2010-01-09 11:13 pm (UTC)
From: [identity profile] sly2m.livejournal.com
Гм...
Прав Микрософт на что? На zip-формат?
Или на Open XML (обращаем особое внимание на слово опен).

Date: 2010-01-10 12:46 pm (UTC)
From: [identity profile] http://openid.yandex.ru/dxnich/ (from livejournal.com)
На docx конечно!
А то так можно договориться до того, что и ntoskrnl.exe можно править в HEX-редакторе!

Я там это, просто смайл забыл поставить. Извиняюсь.

P.S. Кстати, эта удобная структура файла начисто слизана с открытого Open Document. Опенофисовский odt устроен точно так же.

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

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

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

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

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

July 2018

S M T W T F S
1234567
89101112 1314
15161718192021
22232425262728
293031    

Most Popular Tags

Style Credit

Expand Cut Tags

No cut tags
Page generated Jun. 16th, 2025 04:04 pm
Powered by Dreamwidth Studios