Форум » [x]Harbour » Остается в памяти процесс Excel » Ответить

Остается в памяти процесс Excel

Новичок: Привет всем, проблема такая - вывожу отчет на Excel - появляется в памяти процесс Excel.exe, oExcel := TOleAuto():New( "Excel.Application" ) oDocs := oExcel:Get( "WorkBooks" ) oDoc := oDocs:Add() oList := oExcel:Get( "ActiveSheet" ) oExcel:Visible := .F. ... телодвижения ... oExcel:Visible := .T. Пользователь производит определенные действия и при закрытии, в памяти остается процесс Excel.exe. То есть с каждым выводом отчета на Excel в памяти собирается куча этих процессов. Если прописываю в конце oExcel:Quit то при выводе Excel подготавливается, открывается и сразу закрывается ) Требуется, чтобы при подготовке отчета на Excel, сделать активным, вывести на экран но не закрывать (чтобы Пользователь мог дальше колдовать) но при закрытии Пользователем данного отчета - закрывался и в памяти процесс Excel.

Ответов - 9

Dima: Новичок пишет: но при закрытии Пользователем данного отчета - закрывался и в памяти процесс Excel. Проверил у себя , все нормально закрывается и в памяти ни чего не остается. PS EXCEL 2003

Andrey: Dima пишет: Проверил у себя , все нормально закрывается и в памяти ни чего не остается. При админских правах юзера - всё Ок, процесс закрывается. Если у юзера нет админских прав, то бяка - не всегда получается закрыть... У меня некоторые админы сети жаловались на это, что в конце работы на компе - куча процессов Excel.

Dima: Andrey Может ты и прав. У нас все ходят с админскими правами , вероятно поэтому и нет описанной проблемы.


Haz: Думаю что админские права тут не при чем. Процесс создается от имени и с правами текущего пользователя и срответственно может быть убит этим пользователем. А вот кривых сборок офиса я видел много, каких только чудес не увтдишь пока нормальный офис не поставишь. В догонку. У меня ни у одного юзера нет админки , но процесс зависает в памяти только если при выводе произошла ошибка OLE. В остальном все ок

fil: Админские права конечно непричем.Чисто алгоритм действтй. Ежели надо недопучтить висящкго процесса Excel ну и не пускай его через OLE просто ранируй. Иначе надо отслеживать данный Excel-процесс и закрыть Ole-соединение Quit или убивать висящий процесс через WMI

Haz: Пользую обычно так и вроде без проблем [pre2] oExcel := CreateObject( "Excel.Application" ) oExcel:Workbooks:Add() oExcel:Visible := .F. oExcel:SET( "DisplayAlerts", .F. ) oSheet := oExcel:Get( "ActiveSheet" ) ... ... oExcel:Visible := .T. oExcel:SET( "DisplayAlerts", .T. ) [/pre2]

Dima: Haz пишет: oExcel:SET( "DisplayAlerts", .F. ) что то новенькое ;) я так пишу oExcel:DisplayAlerts:=.f.

Haz: Dima пишет: пишу oExcel:DisplayAlerts:=.f. это одно и то же ) В ОЛЕ есть метод Set() иногда только через него и получается

Dima: Haz Точно , я тупанул...



полная версия страницы