Изменения в .Docx без открытия в Word
Модераторы: Hawk, Romeo, Absurd, DeeJayC, WinMain
Как известно файлы .docx – это zip-архив файлов, главным образом в формате .xlm. Пожалуй, основным файлом является «document.xlm». Мне необходимо средствами C извлечь файл «document.xlm» из файла(архива) “AnyDocument.docx” и затем (после некоторых манипуляций) снова поместить его в тот же файл “AnyDocument.docx”. Есть идеи, как это сделать?
Используй для этого OpenXML SDK
https://www.microsoft.com/en-us/downloa ... x?id=30425
https://www.microsoft.com/en-us/downloa ... x?id=30425
Ещё можно использовать 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" в виде звёздочки, расположенной в левом нижнем углу рамки сообщения.
---
Для выделения С++ кода используйте конструкцию [ code=cpp ] Код [ /code ] (без пробелов)
---
Сообщение "Спасибо" малоинформативно. Благодарность правильнее высказать, воспользовавшись кнопкой "Reputation" в виде звёздочки, расположенной в левом нижнем углу рамки сообщения.
Офисы несколько лет назад, в связи с начавшимися проверками, начали переводить на свободный софт, частая ситуация что стоит одна две машины на винде остальные на убунте и подобном. Зачем платить за майкрософтовский офис если либре офис ничем не хуже..
[syntax=Delphi] [/syntax]
- Romeo
- Сообщения: 3126
- Зарегистрирован: 02 мар 2004, 17:25
- Откуда: Крым, Севастополь
- Контактная информация:
Ну если офиса нет, тогда да.
Entites should not be multiplied beyond necessity @ William Occam
---
Для выделения С++ кода используйте конструкцию [ code=cpp ] Код [ /code ] (без пробелов)
---
Сообщение "Спасибо" малоинформативно. Благодарность правильнее высказать, воспользовавшись кнопкой "Reputation" в виде звёздочки, расположенной в левом нижнем углу рамки сообщения.
---
Для выделения С++ кода используйте конструкцию [ code=cpp ] Код [ /code ] (без пробелов)
---
Сообщение "Спасибо" малоинформативно. Благодарность правильнее высказать, воспользовавшись кнопкой "Reputation" в виде звёздочки, расположенной в левом нижнем углу рамки сообщения.
Здесь дело даже не в том, установлен ли у пользователя на компе MS Office или нет, а в способе работы с документом из прикладной программы. Если обращаться к документу средствами OLE-Автоматизации через приложения MS Office, то происходит загрузка самого приложения, в данном случае MS Word, что создаёт определённые неудобства: отнимает время на загрузку, вычислительные ресурсы и делает такую систему весьма ненадёжной. Потом работать с объектами автоматизации MS Office средствами С++ - весьма неудобно из-за необходимости все входные и выходные параметры проводить через тип VARIANT. Лучше для этого использовать C# или Visual Basic, где всё это делается гораздо проще.
На C# есть ClosedXML - обертка для OpenXML в стиле COM. Очень удобна и не требует Office вообщеЛучше для этого использовать C# или Visual Basic
It's a long way to the top if you wanna rock'n'roll
ТС хочет работать с документом Word, при этом нигде не сказано, какова сложность конкретного файла и изменений в нём. Но при этом почему то обсуждается расход памяти на Word и его надёжность. Но ведь он такой большой именно потому, что должен быть достаточно универсальным приложением для работы именно с такими файлами. Не будет ли в итоге приложение, берущее всё на себя, ещё больше? Может быть оно будет и меньше. Но здесь нет данных для такого вывода. А надёжность альтернативной реализации достаточно сложной обработки файлов чужого формата может быть и ниже, особенно если пытаться в одиночку повторить работу всей команды разработчиков Word, да ещё и срочно, а не отладить на множестве версий. Word то в прошлом веке начали. Опять таки какова сложность документа и вносимых изменений? Может быть там и в одиночку можно написать вполне простой и надёжный код, а может быть и весь мелкософт ногу сломит. И зачем именно docx?
Писать можно на чём угодно, но зачем же так себя ограничивать? Пиши на c.
За более чем 10-летнюю историю существования этого форума тема OLE-автоматизации приложений MS-Office поднималась неоднократно. Каждый раз я говорил и буду говорить, что использование для этих целей языка С++ в большинстве случаев не оправдано, поскольку увеличивает трудоёмкость разработки и не даёт выигрыша в быстродействии. Сам сценарий работы с приложениями MS-Office выполняется довольно медленно. Если во время выполнения сценария вдруг закрыть приложение MS-Office или отправить в него неправильную команду, которая приведёт к блокировке сценария, то и основное клиентское приложение упадёт или зависнет. Такая уязвимость значительно снижает качественные показатели клиентского приложения. Ну и, как уже упоминалось ранее, зависимость от наличия установленного на клиентской машине самого MS-Office делает конечный программный продукт менее конкурентно-способным.
Каков выход? Использовать специальные SDK для работы с документами MS-Office и совместимых с ними. Например, всё тот же OpenXML SDK от Microsoft. Нельзя сказать, что там всё будет легко и просто, тоже придётся вначале изучить его, хотя бы самые основы. Но зато это реально работает и не нужно парсить бинарный образ документа вручную или использовать сам MS-Office.
Каков выход? Использовать специальные SDK для работы с документами MS-Office и совместимых с ними. Например, всё тот же OpenXML SDK от Microsoft. Нельзя сказать, что там всё будет легко и просто, тоже придётся вначале изучить его, хотя бы самые основы. Но зато это реально работает и не нужно парсить бинарный образ документа вручную или использовать сам MS-Office.