.net VSTO:can';t打开另一个Excel文件,而加载项的模式窗口阻止了第一个文件

.net VSTO:can';t打开另一个Excel文件,而加载项的模式窗口阻止了第一个文件,.net,excel,ms-office,vsto,add-in,.net,Excel,Ms Office,Vsto,Add In,无法打开另一个Excel文件,而第一个文件被加载项中的模式窗口阻止。关闭对话框窗口将解冻所有打开的挂起文件 Excel版本是2007。是否有一个可编程的解决方案,允许Microsoft Excel 2007在单独的窗口中打开第二个文件,而第一个窗口正在等待加载项从模式对话框窗口中退出 注意:这种行为似乎也适用于Excel自己的对话框窗口。否-这是Excel自动化服务器编写方式的架构限制。只有一个线程为自动化队列提供服务-如果Excel位于调用堆栈的顶部,而下面有任何东西被阻塞,则对自动化服务器的

无法打开另一个Excel文件,而第一个文件被加载项中的模式窗口阻止。关闭对话框窗口将解冻所有打开的挂起文件

Excel版本是2007。是否有一个可编程的解决方案,允许Microsoft Excel 2007在单独的窗口中打开第二个文件,而第一个窗口正在等待加载项从模式对话框窗口中退出


注意:这种行为似乎也适用于Excel自己的对话框窗口。

否-这是Excel自动化服务器编写方式的架构限制。只有一个线程为自动化队列提供服务-如果Excel位于调用堆栈的顶部,而下面有任何东西被阻塞,则对自动化服务器的新调用将排队等待,直到它返回。

我当前正在将应用程序升级到Excel 2007和VS 2010(目标为.NET 4.0)我注意到,如果您使用的是CustomTaskPane,它似乎运行在不同的线程上。我有一个插件,它创建一个任务窗格,启动一个模式表单,并从该表单添加一个新工作簿。它似乎工作没有问题。如果我直接从加载项启动模态表单,我确实会遇到与您描述的相同的问题。我不确定这在.NET3.5或2.0中是否有效,但值得一试。(有关CustomTaskPane的详细信息:)

我能马上想到的唯一选项是从加载项中创建Excel.Application的新实例,并使用此实例打开挂起的文件。不理想,但正如其他答案所说,这是该产品的局限性。(Excel)

您是否尝试过sendKeys?我不惜一切代价避免使用黑客解决方案。您的加载项是否可以使用无模式对话框?我感觉您描述的行为是因为从customtaskpane类启动的模式窗体实际上运行在winforms或wpf usercontrol的主UI线程上。这里的问题是,它的工作,因为它在一个单独的线程。如果您依赖Excel处理某些内容,例如用户通知或文件更改,则在处理模式对话框之前,您可能不希望允许用户继续。