Пока выкручиваюсь прибиванием процесса:
## Код:
```
PROCEDURE KillExcel;
      VAR
         h, ph: WinApi.HANDLE;
         res: WinApi.BOOL;
         entry: WinTlhelp.PROCESSENTRY32W;
   BEGIN
      h := WinTlhelp.CreateToolhelp32Snapshot(WinTlhelp.TH32CS_SNAPPROCESS, 0);
      ASSERT(h # -1, 100);   (* Получили снимок процессов *)
      entry.dwSize := SIZE(WinTlhelp.PROCESSENTRY32W); res := WinTlhelp.Process32FirstW(h, entry);
      IF res = WinApi.TRUE THEN
         ASSERT(entry.dwSize = SIZE(WinTlhelp.PROCESSENTRY32W), 101)   (* Можем читать имя *)
      END;
      WHILE res = WinApi.TRUE DO
         (* StdLog.String(entry.szExeFile); StdLog.Ln; *)
         MtStrings.ToUpper(entry.szExeFile, entry.szExeFile);
         IF entry.szExeFile = "EXCEL.EXE" THEN
            ph := WinApi.OpenProcess(WinApi.PROCESS_TERMINATE, WinApi.FALSE, entry.th32ProcessID);
            ASSERT(ph # 0, 102);   (* Процесс "открылся" *)
            res := WinApi.TerminateProcess(ph, 0);
            ASSERT(res # 0, 103);   (* Процесс убился *)
            res := WinApi.CloseHandle(ph);
            ASSERT(res # 0, 104);   (* Дескриптор удалился *)
         END;
         res := WinTlhelp.Process32NextW(h, entry)
      END;
      ASSERT(WinApi.GetLastError() = WinApi.ERROR_NO_MORE_FILES, 105);   (* Чтение списка процессов завершилось успешно *)
      res := WinApi.CloseHandle(h);
      ASSERT(res # 0)   (* Дескриптор удалился *)
   END KillExcel;
```

Надо только юзерам сообщать, что во время работы екзелем пользоваться запрещается