Здравствуйте, Kelan, Вы писали:
K>Смутил меня код, который каждый раз запускает процесс ворда, для работы с документом.
Этот подход устарел много-много лет назад, с тех пор как Office стал использовать формат Open XML.
K>Вопрос вот какой. Возможно ли это как-то сделать иначе? Гуглом только аналогичные варианты нахожу.
Здравствуйте, Kelan, Вы писали:
K>Добрый день.
K>Меня как джависта, спихнули на саппорт веб-сервиса на c#, где ведется работа с вородовыми документами.
K>Смутил меня код, который каждый раз запускает процесс ворда, для работы с документом. K>Скорость работы подобного подхода оставляет желать лучшего.
K>Вопрос вот какой. Возможно ли это как-то сделать иначе? Гуглом только аналогичные варианты нахожу.
С вордом или вордовыми документами? Это разное.
С вордом порекомендую: посмотреть на dynamic (.net 4.0, c# 4.0) и рассмотреть вариант выгребания нужных данных за один заход. Или записи их в документ за один заход — быстрее получается.
С документами — ищите парсеры, они наверно есть. Для экселя я нашёл. На чтение работают отлично и не сильно медленно.
Здравствуйте, Qbit86, Вы писали:
Q>Этот подход устарел много-много лет назад, с тех пор как Office стал использовать формат Open XML. Q>Open XML SDK 2.0
Ага, спасибо.
Такую "маленькую" мелочь забыл, что нужно поддерживать .doc ))
А тут конвертер надо брать, который не всегда сохраняет форматирование и прочее.
Но за наводку спасибо.
Здравствуйте, Aen Sidhe, Вы писали:
AS>С вордом или вордовыми документами? Это разное.
AS>С вордом порекомендую: посмотреть на dynamic (.net 4.0, c# 4.0) и рассмотреть вариант выгребания нужных данных за один заход. Или записи их в документ за один заход — быстрее получается. AS>С документами — ищите парсеры, они наверно есть. Для экселя я нашёл. На чтение работают отлично и не сильно медленно.
С вордовыми документами. Выше уже послали к Open XML SDK. (макросы, рецензирование и прочее привешивать).
Одна загвоздка про которую забыл упомянуть, что нужно еще поддерживать старый формат доков.
Здравствуйте, Kelan, Вы писали:
K>Такую "маленькую" мелочь забыл, что нужно поддерживать .doc ))
Это очень печально и невыразимо прискорбно.
Советую продавить среди начальства решение не поддерживать этот морально устаревший формат. Разница в стоимости разработки и поддержки работы со старым и новым форматом — идёт на порядки. Готов ли заказчик переплатить в несколько раз за поддержку древнего и ущербного формата?
Здравствуйте, Qbit86, Вы писали:
Q>Это очень печально и невыразимо прискорбно.
Q>Советую продавить среди начальства решение не поддерживать этот морально устаревший формат. Разница в стоимости разработки и поддержки работы со старым и новым форматом — идёт на порядки. Готов ли заказчик переплатить в несколько раз за поддержку древнего и ущербного формата?
Ну, Россея большая, и если центральные офисы обновились, то далекие области часто еще и с ЭЛТ сидят, так что тут не до обновления офиса, такова действительность.
Здравствуйте, Kelan, Вы писали:
K>Здравствуйте, Qbit86, Вы писали:
Q>>Это очень печально и невыразимо прискорбно.
Q>>Советую продавить среди начальства решение не поддерживать этот морально устаревший формат. Разница в стоимости разработки и поддержки работы со старым и новым форматом — идёт на порядки. Готов ли заказчик переплатить в несколько раз за поддержку древнего и ущербного формата?
K>Ну, Россея большая, и если центральные офисы обновились, то далекие области часто еще и с ЭЛТ сидят, так что тут не до обновления офиса, такова действительность.
Как вариант — пересохранять *.doc в *.docx через ком и далее через OpenXML SDK.
Здравствуйте, Kelan, Вы писали:
K>Меня как джависта, спихнули на саппорт веб-сервиса на c#, где ведется работа с вородовыми документами.
как человек который уже 4 года ковыряется в word-документах могу лишь рассказать анекдот:
Приходит сын к отцу-программисту:
– Папа, а почему солнце всходит?
– Ты проверял?
– Да…
– Каждый день всходит?
– Да, и каждый день заходит…
– НИЧЕГО НЕ ТРОГАЙ!!!
если кратко есть такие варианты:
1. Aspose.Words. Монстр, который может все. Цена начинается от 999 баксов, мы себе недавно купили Aspose.Words лицензию на одного разработчика. Компонент работает хорошо, насколько это возможно. От мелких факапов не спрячешься — типа "если в конца заголовка #2 не стоит перевод на новую строку, то строка разрывает на две. Если страница забита текстом под завязку и в конце — разрыв страницы — то оно прыгает на следующую при конвертации в PDF.
Короче результат условно-приемлемый, особенно если надо конвертировать документы в PDF.
2. Open XML SDK. Еще один монстр который может вроде все, но при работе оказывается что гибкость шаблонов не такая уж и высокая, тк в коде надо работать со структурой самого документа. Тем более этот подход не годится для .doc.
3. Docx — поделки от людей которые нашли компонент для работы с ZIP и научились парсить XML. http://docx.codeplex.com/ — вот бесплатная.
3а. Не упущу шанс порекламировать свою собственную поделку. http://reinvokesolutions.com — сейчас проект на ней уже 4й год крутится с таблицами и блек-джеком, но конвертировать в PDF она не умеет, потому докупили Aspose.Words.
4. Самый простой вариант. Ничего не трогать. Он мне больше всего нравится. Любой софт работающий с проприентарным .doc форматом априори хуже ворда. Потому что даже Open XML который стандартизирован вдоль и впоперек может открываться по-разному в 2007м и 2010м вордах. Если документов у вас единицы — можно рискнуть, перейти на либу и вручную все неприятности подправить. Но если там до сих пор вертятся .doc — то думаю за последние 5 лет там набралось не 10 и не 100 документов.
If the message above is in English — means I'm wasting my work time and work computer to post here. No hard feelings
Здравствуйте, Kelan, Вы писали:
K>Скорость работы подобного подхода оставляет желать лучшего. K>Вопрос вот какой. Возможно ли это как-то сделать иначе? Гуглом только аналогичные варианты нахожу.
Смотря что нужно делать с документами. Распишите хотябы примерно.
На вскидку же могу предложить: Из файлов нужно доставать только текст и свойства. Тогда для извлечения текста можно воспользоваться IFilter, как с ним работать можно посмотреть, например, тут Using IFilter in C#.
Свойства можно читать им же (хотя вроде были какие-то проблемы...) или воспользоваться, вот DSOFile.dll
Перед обработкой сконвертировать фaйл в .docx (и затем использовать тот хе Open XML SDK). Это можно сделать:
Используя обычный Word
Используя Word Automation Services. Но это при условии, что у вас где-то завалялась лицензия на SharePoint 2010
Используя конвертер для массового преобразования Bulk Convert DOC to DOCX
Будет ли это быстрее — большой вопрос.
Взять библиотеку от Aspose.
Re: Какими способами можно работать с Word?
От:
Аноним
Дата:
05.06.12 06:46
Оценка:
Здравствуйте, Kelan, Вы писали:
K>Меня как джависта, спихнули на саппорт веб-сервиса на c#, где ведется работа с вородовыми документами. K>Смутил меня код, который каждый раз запускает процесс ворда, для работы с документом.
По-моему, решение очевидно. Удивляюсь, что никто не написал. Сделайте сервис (службу), запускайте ворд при ее старте и вырубайте при выходе. К ней прикрутите интерфейс. Я так и сделал, когда мне было надо.
Здравствуйте, Аноним, Вы писали:
А>По-моему, решение очевидно. Удивляюсь, что никто не написал. Сделайте сервис (службу), запускайте ворд при ее старте и вырубайте при выходе. К ней прикрутите интерфейс. Я так и сделал, когда мне было надо.
Только нужно не забыть сделать рециклинг Word, т.к. периодически он все же падает (особенно, когда встречает всякие не вполне валидные документы).
Здравствуйте, Kelan, Вы писали:
K>Добрый день.
K>Меня как джависта, спихнули на саппорт веб-сервиса на c#, где ведется работа с вородовыми документами.
K>Смутил меня код, который каждый раз запускает процесс ворда, для работы с документом.
Самый скоростной способ — перенести всю работу внутрь word'а. Пишите макросы, делающие всю работу и возвращающие конечный результат, и вызываете их из своего кода. Word поднимаете один раз и регистрируете в Running Objects Table(ROT) по сильной ссылке, потом по мере надобности берёте интерфейс оттуда, предусмотрев перезапуск в случае падения. Еще способ — свой COM объект, подгружаемый в сервер автоматизации. Так я делал с AutoCAD'ом, но в случае с офисом этот способ преимуществ перед макросами не имеет.