Вниз
Скачать: CL | DM;

Работа в 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 вся ветка

Скачать: CL | DM;



Память: 0.47 MB
Время: 0.013 c
14-53692
VictorT
2004-01-30 11:13
2004.02.17
Посоветуйте, как перекомпоновать интерфейс.


6-53680
Zilog_
2003-12-13 08:47
2004.02.17
Странная зависимость между IE и диалогом открытия файла


1-53632
КомофОнСамый
2004-02-06 19:59
2004.02.17
Как упорядочить созданое MDI окно


1-53579
PHENIX physicist
2004-02-09 14:54
2004.02.17
XML вместо INI


3-53382
Zilog
2004-01-26 11:16
2004.02.17
Сортировка




   Наверх