Показать сообщение отдельно
Старый 09.02.2010, 10:12   #2  
Storkich is offline
Storkich
Участник
 
149 / 10 (1) +
Регистрация: 08.03.2007
Продолжу рассуждения на эту тему.
Один процесс 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)