![]() |
#2 |
Участник
|
Продолжу рассуждения на эту тему.
Один процесс EXCEL.EXE может деражть открытими несколько файлов Код: create(App); App.Visible := true; App.Workbooks.add; App.Workbooks.add; App.Workbooks.add; sleep(3000); App.Visible := false; App.Visible := true Как с этим бороться я не смог найти. По этому выход использовать create(App,TRUE); и засорять память процессами EXCEL.EXE При этом может возникнуть ситуация когда пытаемся открыть файл, который занят невидимым процессом. От сюда вывод, невидимые EXCEL.EXE - ЗЛО Кстати: Приведу листинг функции, которая опеределяет, можно ли работать с инстансом Экселя. Т.е. не находится ли пользователь в редактировании ячейки. Код: WshShellG - Automation: 'Windows Script Host Object Model'.WshShell ExcelAvailable() : Boolean // Если Эксель недоступен, то выполнение скрипта "вылетает" по таймауту в 10 секунд FileName := ENVIRON('AppData')+'\CheckExcel.vbs'; IF NOT EXISTS(FileName) THEN BEGIN F.WRITEMODE(TRUE); F.TEXTMODE(TRUE); F.CREATE(FileName); F.WRITE('On Error Resume Next'); F.WRITE('set XL = getObject (,"Excel.Application")'); F.WRITE('if err.number = 0 then'); F.WRITE(' err.Clear'); F.WRITE(' if XL.visible then'); F.WRITE(' if err.number = 0 then'); F.WRITE(' end if'); F.WRITE(' end if'); F.WRITE('end if'); F.CLOSE; END; IF ISCLEAR(WshShellG) THEN CREATE(WshShellG); ShellCmdG := 'Wscript.exe /B "'+FileName+'"'; i := 1; bWait := TRUE; t := TIME; WshShellG.Run(ShellCmdG,i,bWait); EXIT ((TIME-t) < 1000) |
|