Форум: "Основная";
Текущий архив: 2004.02.17;
Скачать: [xml.tar.bz2];
ВнизРабота в Word Найти похожие ветки
← →
Юрий Федоров (2004-02-05 21:02) [0]Доброе время суток.
По долгу службы пришлось парсить документы Word.
Складывается непонятная (и неприятная ситуация)
Два варианта
1. Word уже запущен, и целевой документ в нем открыт.
Я действую по совету Тенцера - подключаюсь к уже запушенной копии и запускаю процесс
2. Word не был запущен (или был, но целевой документ в нем не открыт)
Действую стандартно
CreateOleObject(еслпи надо), открываю документ. и запускаю процесс.
Проблема
Вариант 2 работает приблизиительно в 5 раз медленнее, чем вариант 1.
Какие будут мысли?
Версия офис - 2000
Единственное, что я пока придумал как возможную причину - у меня непропатченный Word...
← →
Nikolay M. (2004-02-05 21:12) [1]А работает медленно именно подъем СОМ-сервера или собственно работа с ним?
← →
Юрий Федоров (2004-02-05 21:18) [2]собственно работа
подъем - это понятно, что какое-то время должно занять
← →
Nikolay M. (2004-02-05 22:16) [3]
> подъем - это понятно, что какое-то время должно занять
Ну естественно.
А ты через раннее или позднее?
Кстати, может, у тебя ворд во втором случае видимый или сообщения обрабатывает?
← →
Юрий Федоров (2004-02-05 22:23) [4]Через раннее.
_Application скрываю (Visible:=false);
Впрочем, от этого не зависит (у меня только чтение документа)
Насчет сообщений - не в курсе, как определить, обрабатывает или нет ?
← →
Nikolay M. (2004-02-05 22:30) [5]Попробуй
WordApp.ScreenUpdating[LOCALE_USER_DEFAULT] := False;
или
WordApp.EnableEvents := False;
?
← →
Юрий Федоров (2004-02-05 23:24) [6]По логике все наоборот
если документ был (на экране, видимый всем) - то нормально
если его не было - морозит
:-(
← →
Rouse_ (2004-02-05 23:44) [7]Скорее ошибка в том что парсерить ты начинаешь при создании объекта TMSOfficeExecutor в котором у тебя и происходит FApp:=CreateOleObject(sApp) as _Application; (сори что переношу беседу из аси...)
А я советую, делать
FApp := CreateOleObject("Word.Application");
FApp.Documents.Open(FileName := "c:\tmp.doc", ReadOnly:=False);
FApp.Visible := False;
при запуске программы... т.е. немного пересмотреть логику приложения...
В итоге к моменту самого начала процесса парсинга у тебя будет открытый ворд с документом, с которым можно спокойно работать...
← →
Юрий Федоров (2004-02-06 00:27) [8]>>Rouse_ © (05.02.04 23:44) [7]
Так вот ведь
FApp:=CreateOleObject(sApp) as _Application; (сори что переношу беседу из аси...)
via
FApp := CreateOleObject("Word.Application");
Это то же самое
далее опять то же самое
то есть смысл вопроса
почему отличается скорость выполнения методов (уже при парсинге) в случае открытия документа визуальными средствами Word против случая открытия его же средствами методов Word как COM объекта
разумеется к началу парсинга у меня уже есть открытый ворд с документом (иначе что бы я стал парсить)
← →
Nikolay M. (2004-02-06 09:26) [9]
> разумеется к началу парсинга у меня уже есть открытый ворд
> с документом (иначе что бы я стал парсить)
Ну, если время поджимает, можно с глюками ворда не разбираться, а пойти по пути наименьшего сопротивления: открыть документ через шелл и цепляться к уже открытому документу :)
А можешь мне на мыло минимальный кусок тормозящего кода кинуть? Даже интересно, черт возьми.
← →
REA (2004-02-06 10:39) [10]Не в тему, но по теме: вопросы автоматизации ворда-эксела вылезают очень часто - может складывать куда-то найденные решения (Word tips"n"tricks)?
Страницы: 1 вся ветка
Форум: "Основная";
Текущий архив: 2004.02.17;
Скачать: [xml.tar.bz2];
Память: 0.46 MB
Время: 0.011 c