我需要自动化特定版本的Excel(2003),与目标计算机上安装的默认版本无关。为此,我使用以下步骤:
这一切都运行正常,但在 ExcelApplication 对象上调用 Quit 后,Excel进程不会终止。与Word相同的设置按预期工作,并且该过程终止。任何关于Excel为什么表现不同的想法都会非常感激。
我从.NET中自动化Excel时已经读过类似的问题,其中悬挂COM引用是原因。但是,如果这也是我的C ++案例的原因,我不明白为什么。即使我除 Quit 之外什么都不做,这个过程仍然存在:
/* create process, get handle to accessible Excel window */
Excel11::_ApplicationPtr excelApplication;
try
{
Excel11::WindowPtr::Interface* pInterface;
if ( ::AccessibleObjectFromWindow( hwndExcelAccessible, OBJID_NATIVEOM, IID_IDispatch, reinterpret_cast< void** >( &pInterface ) ) == S_OK )
{
excelApplication = pInterface->Application;
pInterface->Release();
}
}
catch ( _com_error& e ) { /* omitted */ }
excelApplication->Quit();
答案 0 :(得分:-1)
Microsoft不再支持您正在做的事情:http://support.microsoft.com/kb/257757(它讨论服务器端代码,但它引用任何非交互式解决方案,无论架构如何)。
尽管如此,我相信我在一段时间内在某些.Net代码中遇到了类似的问题,解决方案是在完成后强行杀死Excel。我不记得为什么必须这样做的确切原因。