Изменения в .Docx без открытия в Word

Модераторы: Hawk, Romeo, Absurd, DeeJayC, WinMain

petroid
Сообщения: 2
Зарегистрирован: 12 июл 2015, 00:21

Как известно файлы .docx – это zip-архив файлов, главным образом в формате .xlm. Пожалуй, основным файлом является «document.xlm». Мне необходимо средствами C извлечь файл «document.xlm» из файла(архива) “AnyDocument.docx” и затем (после некоторых манипуляций) снова поместить его в тот же файл “AnyDocument.docx”. Есть идеи, как это сделать?
Аватара пользователя
WinMain
Сообщения: 929
Зарегистрирован: 14 янв 2005, 10:30
Откуда: Москва
Контактная информация:

Используй для этого OpenXML SDK
https://www.microsoft.com/en-us/downloa ... x?id=30425
Аватара пользователя
Decoder
Сообщения: 308
Зарегистрирован: 19 фев 2008, 23:11
Откуда: Moscow

Ещё можно использовать SDK от Libre Office. Он тоже умеет работать с документами Microsoft Office.
Поумнеть несложно, куда труднее от дури избавиться.
Аватара пользователя
Romeo
Сообщения: 3126
Зарегистрирован: 02 мар 2004, 17:25
Откуда: Крым, Севастополь
Контактная информация:

Господа, может я чего-то не понимаю, но почему бы не пользоваться программно средствами самого Microsoft Office? Вся функциональность офиса выставлена наружу через COM объекты, которые можно создавать и использовать. Это самое правильно и самое прямое решение, как по мне. Или предполагается, что на компьютере офис вообще не установлен?
Entites should not be multiplied beyond necessity @ William Occam
---
Для выделения С++ кода используйте конструкцию [ code=cpp ] Код [ /code ] (без пробелов)
---
Сообщение "Спасибо" малоинформативно. Благодарность правильнее высказать, воспользовавшись кнопкой "Reputation" в виде звёздочки, расположенной в левом нижнем углу рамки сообщения.
Аватара пользователя
Duncon
Сообщения: 2085
Зарегистрирован: 10 окт 2004, 14:11
Откуда: Питер
Контактная информация:

Офисы несколько лет назад, в связи с начавшимися проверками, начали переводить на свободный софт, частая ситуация что стоит одна две машины на винде остальные на убунте и подобном. Зачем платить за майкрософтовский офис если либре офис ничем не хуже..
[syntax=Delphi] [/syntax]
Аватара пользователя
Romeo
Сообщения: 3126
Зарегистрирован: 02 мар 2004, 17:25
Откуда: Крым, Севастополь
Контактная информация:

Ну если офиса нет, тогда да.
Entites should not be multiplied beyond necessity @ William Occam
---
Для выделения С++ кода используйте конструкцию [ code=cpp ] Код [ /code ] (без пробелов)
---
Сообщение "Спасибо" малоинформативно. Благодарность правильнее высказать, воспользовавшись кнопкой "Reputation" в виде звёздочки, расположенной в левом нижнем углу рамки сообщения.
Аватара пользователя
WinMain
Сообщения: 929
Зарегистрирован: 14 янв 2005, 10:30
Откуда: Москва
Контактная информация:

Здесь дело даже не в том, установлен ли у пользователя на компе MS Office или нет, а в способе работы с документом из прикладной программы. Если обращаться к документу средствами OLE-Автоматизации через приложения MS Office, то происходит загрузка самого приложения, в данном случае MS Word, что создаёт определённые неудобства: отнимает время на загрузку, вычислительные ресурсы и делает такую систему весьма ненадёжной. Потом работать с объектами автоматизации MS Office средствами С++ - весьма неудобно из-за необходимости все входные и выходные параметры проводить через тип VARIANT. Лучше для этого использовать C# или Visual Basic, где всё это делается гораздо проще.
Аватара пользователя
somewhere
Сообщения: 1858
Зарегистрирован: 31 авг 2006, 17:14
Откуда: 71 RUS
Контактная информация:

Лучше для этого использовать C# или Visual Basic
На C# есть ClosedXML - обертка для OpenXML в стиле COM. Очень удобна и не требует Office вообще
It's a long way to the top if you wanna rock'n'roll
Аватара пользователя
Сионист
Сообщения: 1211
Зарегистрирован: 31 мар 2014, 06:18

ТС хочет работать с документом Word, при этом нигде не сказано, какова сложность конкретного файла и изменений в нём. Но при этом почему то обсуждается расход памяти на Word и его надёжность. Но ведь он такой большой именно потому, что должен быть достаточно универсальным приложением для работы именно с такими файлами. Не будет ли в итоге приложение, берущее всё на себя, ещё больше? Может быть оно будет и меньше. Но здесь нет данных для такого вывода. А надёжность альтернативной реализации достаточно сложной обработки файлов чужого формата может быть и ниже, особенно если пытаться в одиночку повторить работу всей команды разработчиков Word, да ещё и срочно, а не отладить на множестве версий. Word то в прошлом веке начали. Опять таки какова сложность документа и вносимых изменений? Может быть там и в одиночку можно написать вполне простой и надёжный код, а может быть и весь мелкософт ногу сломит. И зачем именно docx?
Писать можно на чём угодно, но зачем же так себя ограничивать? Пиши на c.
Аватара пользователя
WinMain
Сообщения: 929
Зарегистрирован: 14 янв 2005, 10:30
Откуда: Москва
Контактная информация:

За более чем 10-летнюю историю существования этого форума тема OLE-автоматизации приложений MS-Office поднималась неоднократно. Каждый раз я говорил и буду говорить, что использование для этих целей языка С++ в большинстве случаев не оправдано, поскольку увеличивает трудоёмкость разработки и не даёт выигрыша в быстродействии. Сам сценарий работы с приложениями MS-Office выполняется довольно медленно. Если во время выполнения сценария вдруг закрыть приложение MS-Office или отправить в него неправильную команду, которая приведёт к блокировке сценария, то и основное клиентское приложение упадёт или зависнет. Такая уязвимость значительно снижает качественные показатели клиентского приложения. Ну и, как уже упоминалось ранее, зависимость от наличия установленного на клиентской машине самого MS-Office делает конечный программный продукт менее конкурентно-способным.
Каков выход? Использовать специальные SDK для работы с документами MS-Office и совместимых с ними. Например, всё тот же OpenXML SDK от Microsoft. Нельзя сказать, что там всё будет легко и просто, тоже придётся вначале изучить его, хотя бы самые основы. Но зато это реально работает и не нужно парсить бинарный образ документа вручную или использовать сам MS-Office.
Ответить