Как запустить Excel из консольного приложения или в отдельном потоке (TThread)
Консольное приложение и дочерний поток (класс TThread) не предполагают работу с COM сервером, как это сделано в главном потоке для Application в VCL. Для того чтобы все работало, необходим вызов функции WinAPI CoInitialize.
{$APPTYPE CONSOLE} // для консольного приложения
var
NeedToUninitialize: Boolean; … begin
// NeedToUninitialize := Succeeded(CoInitialize(nil));
NeedToUninitialize := Succeeded(CoInitializeEx(nil, COINIT_MULTITHREADED)); try
// здесь работаем с Excel'ем
finally
if NeedToUninitialize then CoUninitialize; end; end.
Отличие при работе в Thread — весь код работы должен быть помещен в метод TThread.Execute.
Для C# ничего дополнительно вызывать не нужно — все работает, что для WinForms, что для Console, что для объекта класса Thread().
CoInitializeEx
OleInitialize