-
Добрый день, Мастера! Помогите разобраться в некотором моменте… Используя компоненты – WordApplication и WordDocument, приложение открывает нужные файлы. Однако, если закрываешь Word, то следующее прочтение по базе нужного файла вызывает ошибку класса EOleException - “ Сервер RPC недоступен ”! Что интересно, с компонентами ExcelApplication и ExcelWorkbook все проходит гладко, и нет подобных ошибок! Кто встречался с подобным, напишите, пожайлуста Заранее благодарю, Максим
-
> с компонентами ExcelApplication и ExcelWorkbook все проходит > гладко, и нет подобных ошибок
И это плохо.
А в чем собссно проблема ?
-
Проблема в том, что после принудительного закрытия Word больше не открываются Word документы в моем приложении! Что посоветуете?
-
> Что посоветуете?
Посоветую понять, что документы открывает не твое приложение, а чужое. И если оно будучи закрытым более не существует, то и документы открывать некому.
-
Спасибо, это все понятно.... Логика ясна. Но, в Excel то работает, хоть закрывай редактор, хоть не закрывай,приложение в любом случае "откроет" *.xls. Все-таки, может я чего-то не знаю про Word? Как это обойти? Вот, собственно на конкретном примере...
procedure Otkr_f(Im_f:string); var FileExt: string[4]; Dial:OleVariant; begin //просмотр // puth:=ImageForm.FileListBox1.Filename;
puth:=trim(Im_f); FileExt := (ExtractFileExt(Im_f)); //AnsiUpperCase if (FileExt = '.doc')or(FileExt = '.DOC') then begin F_glav.WordApplication1.Connect; F_glav.WordApplication1.Documents.Add(puth,EmptyParam,EmptyParam,EmptyParam); //EmptyParam Connect ; F_glav.WordDocument1.ConnectTo(F_glav.WordApplication1.ActiveDocument);
F_glav.WordApplication1.Visible:=true;
end; if (FileExt = '.xls')or(FileExt = '.XLS') then begin F_glav.ExcelApplication1.Workbooks.Add(puth,0); F_glav.ExcelWorkbook1.ConnectTo(F_glav.ExcelApplication1.ActiveWorkbook); F_glav.ExcelApplication1.Visible[0]:=true;
end;
end;
И еще - F_glav.WordDocument1.ConnectTo(F_glav.WordApplication1.ActiveDocument);
не активирует последний открытый файл, а добавляет к списку открытых!
Что скажете?
-
А собссно какая строчка кода приводит к исключению ? И какая, как напротив ожидалось, не приводит ?
-
Вот строка : F_glav.WordApplication1.Documents.Add(puth,EmptyParam,EmptyParam,EmptyParam)
после второго запуска Word выдает исключение, причем EmptyParam этом принимает значение Error(-2147352572)
-
> после второго запуска
В этой строке нет никакого запуска. А если ты ручками Ворд второй раз запускаешь, перед тем как выполнить эту строчку, то ССЗБ)
> EmptyParam этом принимает значение Error(-2147352572) >
Это как это ?
EmptyParam - это входной параметр !
-
Пробую другой вариант! Пусть по старинке,зато работает, как надо! Сколько не запускай редактор, нет никаких срывов. Вот!
try V := CreateOleObject('Word.Basic'); V.AppShow; //делаем окно редактора видимым V.FileNew(DataM.Q_uchetPuth_dop.AsString); F_prosm.OleContainer1.CreateLinkToFile //дополн.форма!(DataM.Q_uchetPuth_dop.AsString,false);
except On EOleSysError do begin Application.MessageBox('На компьютере нет выполняющегося в данный момент Word', 'Приложение будет закрыто',MB_OK+MB_ICONEXCLAMATION); Application.Terminate; end; end;
-
Ну и зачем эта проктология, если и у Ворда и у Ёхеля как у серверов автоматизации есть событие OnQuit ?
|