Какими способами можно работать с Word?
От: Kelan  
Дата: 30.05.12 09:47
Оценка:
Добрый день.

Меня как джависта, спихнули на саппорт веб-сервиса на c#, где ведется работа с вородовыми документами.

Смутил меня код, который каждый раз запускает процесс ворда, для работы с документом.
Скорость работы подобного подхода оставляет желать лучшего.


this._wordApp = new Word.Application() {
    Visible = false,
    DisplayRecentFiles = false,
    DisplayAlerts = Word.WdAlertLevel.wdAlertsNone,
    ScreenUpdating = true,
    FeatureInstall = MsoFeatureInstall.msoFeatureInstallNone,
    AutomationSecurity = MsoAutomationSecurity.msoAutomationSecurityForceDisable
};
this.DisableAutoMacroses();

// здесь естественно открытие документа.
this._wordDocument = _wordApp.Documents.OpenNoRepairDialog(ref fileName,
    ref paramOpenConfirmConversions,
    ref paramOpenReadOnly,
    ref paramOpenAddToRecentFiles,
    ref paramOpenPasswordDocument,
    ref paramOpenPasswordTemplate,
    ref paramOpenRevert,
    ref paramOpenWritePasswordDocument,
    ref paramOpenWritePasswordTemplate,
    ref paramOpenFormat,
    ref paramOpenEncoding,
    ref paramOpenVisible,
    ref paramOpenOpenAndRepair,
    ref paramOpenDocumentDirection,
    ref paramOpenNoEncodingDialog,
    ref paramOpenXMLTransform
);


Вопрос вот какой. Возможно ли это как-то сделать иначе? Гуглом только аналогичные варианты нахожу.
Re: Open XML SDK
От: Qbit86 Кипр
Дата: 30.05.12 09:51
Оценка:
Здравствуйте, Kelan, Вы писали:

K>Смутил меня код, который каждый раз запускает процесс ворда, для работы с документом.


Этот подход устарел много-много лет назад, с тех пор как Office стал использовать формат Open XML.

K>Вопрос вот какой. Возможно ли это как-то сделать иначе? Гуглом только аналогичные варианты нахожу.


Open XML SDK 2.0
Глаза у меня добрые, но рубашка — смирительная!
Re: Какими способами можно работать с Word?
От: Aen Sidhe Россия Просто блог
Дата: 30.05.12 09:52
Оценка:
Здравствуйте, Kelan, Вы писали:

K>Добрый день.


K>Меня как джависта, спихнули на саппорт веб-сервиса на c#, где ведется работа с вородовыми документами.


K>Смутил меня код, который каждый раз запускает процесс ворда, для работы с документом.

K>Скорость работы подобного подхода оставляет желать лучшего.

K>Вопрос вот какой. Возможно ли это как-то сделать иначе? Гуглом только аналогичные варианты нахожу.


С вордом или вордовыми документами? Это разное.

С вордом порекомендую: посмотреть на dynamic (.net 4.0, c# 4.0) и рассмотреть вариант выгребания нужных данных за один заход. Или записи их в документ за один заход — быстрее получается.
С документами — ищите парсеры, они наверно есть. Для экселя я нашёл. На чтение работают отлично и не сильно медленно.
С уважением, Анатолий Попов.
ICQ: 995-908
Re[2]: Open XML SDK
От: Kelan  
Дата: 30.05.12 09:57
Оценка:
Здравствуйте, Qbit86, Вы писали:

Q>Этот подход устарел много-много лет назад, с тех пор как Office стал использовать формат Open XML.

Q>Open XML SDK 2.0

Ага, спасибо.
Такую "маленькую" мелочь забыл, что нужно поддерживать .doc ))

А тут конвертер надо брать, который не всегда сохраняет форматирование и прочее.
Но за наводку спасибо.
Re[2]: Какими способами можно работать с Word?
От: Kelan  
Дата: 30.05.12 10:00
Оценка:
Здравствуйте, Aen Sidhe, Вы писали:

AS>С вордом или вордовыми документами? Это разное.


AS>С вордом порекомендую: посмотреть на dynamic (.net 4.0, c# 4.0) и рассмотреть вариант выгребания нужных данных за один заход. Или записи их в документ за один заход — быстрее получается.

AS>С документами — ищите парсеры, они наверно есть. Для экселя я нашёл. На чтение работают отлично и не сильно медленно.

С вордовыми документами. Выше уже послали к Open XML SDK. (макросы, рецензирование и прочее привешивать).
Одна загвоздка про которую забыл упомянуть, что нужно еще поддерживать старый формат доков.
Re[3]: Open XML SDK
От: Qbit86 Кипр
Дата: 30.05.12 10:01
Оценка:
Здравствуйте, Kelan, Вы писали:

K>Такую "маленькую" мелочь забыл, что нужно поддерживать .doc ))


Это очень печально и невыразимо прискорбно.

Советую продавить среди начальства решение не поддерживать этот морально устаревший формат. Разница в стоимости разработки и поддержки работы со старым и новым форматом — идёт на порядки. Готов ли заказчик переплатить в несколько раз за поддержку древнего и ущербного формата?
Глаза у меня добрые, но рубашка — смирительная!
Re[4]: Open XML SDK
От: Kelan  
Дата: 30.05.12 10:07
Оценка:
Здравствуйте, Qbit86, Вы писали:

Q>Это очень печально и невыразимо прискорбно.


Q>Советую продавить среди начальства решение не поддерживать этот морально устаревший формат. Разница в стоимости разработки и поддержки работы со старым и новым форматом — идёт на порядки. Готов ли заказчик переплатить в несколько раз за поддержку древнего и ущербного формата?


Ну, Россея большая, и если центральные офисы обновились, то далекие области часто еще и с ЭЛТ сидят, так что тут не до обновления офиса, такова действительность.
Re[5]: Open XML SDK
От: Aen Sidhe Россия Просто блог
Дата: 30.05.12 10:31
Оценка:
Здравствуйте, Kelan, Вы писали:

K>Здравствуйте, Qbit86, Вы писали:


Q>>Это очень печально и невыразимо прискорбно.


Q>>Советую продавить среди начальства решение не поддерживать этот морально устаревший формат. Разница в стоимости разработки и поддержки работы со старым и новым форматом — идёт на порядки. Готов ли заказчик переплатить в несколько раз за поддержку древнего и ущербного формата?


K>Ну, Россея большая, и если центральные офисы обновились, то далекие области часто еще и с ЭЛТ сидят, так что тут не до обновления офиса, такова действительность.


Как вариант — пересохранять *.doc в *.docx через ком и далее через OpenXML SDK.
С уважением, Анатолий Попов.
ICQ: 995-908
Re[6]: Open XML SDK
От: Kelan  
Дата: 30.05.12 10:41
Оценка:
Здравствуйте, Aen Sidhe, Вы писали:

AS>Как вариант — пересохранять *.doc в *.docx через ком и далее через OpenXML SDK.


Не, я уже прикинул, что просто код разделю на 2 части (старый и новый форматы).
*.doc все-равно порядка 25% только, выигрыш всяко будет.
Re: Какими способами можно работать с Word?
От: depend86  
Дата: 30.05.12 10:56
Оценка: +1
K>Вопрос вот какой. Возможно ли это как-то сделать иначе? Гуглом только аналогичные варианты нахожу.

Если есть деньги то можно юзать Aspose.Words for .NET
Re: Какими способами можно работать с Word?
От: Niemand Австралия  
Дата: 30.05.12 12:40
Оценка: 6 (2)
Здравствуйте, 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
Re[2]: Какими способами можно работать с Word?
От: Niemand Австралия  
Дата: 30.05.12 12:42
Оценка:
Здравствуйте, Niemand, Вы писали:

N>Короче результат условно-приемлемый, особенно если надо конвертировать документы в PDF.

* НЕ надо конвертировать*
If the message above is in English — means I'm wasting my work time and work computer to post here. No hard feelings
Re: Какими способами можно работать с Word?
От: Михаил Романов Удмуртия https://mihailromanov.wordpress.com/
Дата: 30.05.12 14:18
Оценка:
Здравствуйте, Kelan, Вы писали:

K>Скорость работы подобного подхода оставляет желать лучшего.

K>Вопрос вот какой. Возможно ли это как-то сделать иначе? Гуглом только аналогичные варианты нахожу.

Смотря что нужно делать с документами. Распишите хотябы примерно.

На вскидку же могу предложить:
  1. Из файлов нужно доставать только текст и свойства. Тогда для извлечения текста можно воспользоваться IFilter, как с ним работать можно посмотреть, например, тут Using IFilter in C#.
    Свойства можно читать им же (хотя вроде были какие-то проблемы...) или воспользоваться, вот DSOFile.dll
  2. Перед обработкой сконвертировать фaйл в .docx (и затем использовать тот хе Open XML SDK). Это можно сделать:
    • Используя обычный Word
    • Используя Word Automation Services. Но это при условии, что у вас где-то завалялась лицензия на SharePoint 2010
    • Используя конвертер для массового преобразования Bulk Convert DOC to DOCX
    Будет ли это быстрее — большой вопрос.
  3. Взять библиотеку от Aspose.
Re: Какими способами можно работать с Word?
От: Аноним  
Дата: 05.06.12 06:46
Оценка:
Здравствуйте, Kelan, Вы писали:

K>Меня как джависта, спихнули на саппорт веб-сервиса на c#, где ведется работа с вородовыми документами.

K>Смутил меня код, который каждый раз запускает процесс ворда, для работы с документом.

По-моему, решение очевидно. Удивляюсь, что никто не написал. Сделайте сервис (службу), запускайте ворд при ее старте и вырубайте при выходе. К ней прикрутите интерфейс. Я так и сделал, когда мне было надо.
Re[2]: Какими способами можно работать с Word?
От: Михаил Романов Удмуртия https://mihailromanov.wordpress.com/
Дата: 05.06.12 07:09
Оценка: 9 (1)
Здравствуйте, Аноним, Вы писали:

А>По-моему, решение очевидно. Удивляюсь, что никто не написал. Сделайте сервис (службу), запускайте ворд при ее старте и вырубайте при выходе. К ней прикрутите интерфейс. Я так и сделал, когда мне было надо.

Только нужно не забыть сделать рециклинг Word, т.к. периодически он все же падает (особенно, когда встречает всякие не вполне валидные документы).
Re: Какими способами можно работать с Word?
От: Jolly Roger  
Дата: 05.06.12 08:30
Оценка:
Здравствуйте, Kelan, Вы писали:

K>Добрый день.


K>Меня как джависта, спихнули на саппорт веб-сервиса на c#, где ведется работа с вородовыми документами.


K>Смутил меня код, который каждый раз запускает процесс ворда, для работы с документом.


Самый скоростной способ — перенести всю работу внутрь word'а. Пишите макросы, делающие всю работу и возвращающие конечный результат, и вызываете их из своего кода. Word поднимаете один раз и регистрируете в Running Objects Table(ROT) по сильной ссылке, потом по мере надобности берёте интерфейс оттуда, предусмотрев перезапуск в случае падения. Еще способ — свой COM объект, подгружаемый в сервер автоматизации. Так я делал с AutoCAD'ом, но в случае с офисом этот способ преимуществ перед макросами не имеет.
"Нормальные герои всегда идут в обход!"
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.