Excel COM 服务器BUG?

Excel COM server BUG?

Excel 版本 15 (2013),在 Windows 8.

重现步骤:

  1. 以编程方式打开 Excel 和一个 XLA 文件。
  2. 确保没有打开其他工作簿。
  3. 设置Excel.Application.Visible = True

Excel 对象损坏并在后续 COM 消息中产生错误。

如果除了 XLA 之外还有打开的工作簿,则一切正常。但是如果XLA是唯一打开的书,那就失败了。

问题:这只是我的问题,还是 COM Excel 服务器错误?

Excel GUI 与该版本中引入的 Excel COM 服务器之间似乎存在偏差。

在旧版本中,当最后一个工作簿关闭时,服务器和 GUI 的行为方式相同:一个空的 GUI(即上面没有工作簿)仍然可见,前提是它在关闭最后一个工作簿之前是可见的书。

但是,此行为在版本 15(或左右)中发生了变化,现在当您关闭最后一本书时 GUI 会隐藏,而服务器不会。这导致如果您的 COM 客户端在 GUI 可见时关闭最后一个工作簿,服务器不会将其变为不可见,因此它将以某种方式获得不兼容的状态,这是不可能从 GUI 到达的。

问题似乎是在 Excel GUI 更改时引入的,因为它现在为每个工作簿分配一个独立的 window。

因此,解决方案是让客户端确保在关闭最后打开的书时将 GUI 变为不可见。

如果您加载了加载项,此问题似乎会更加严重。也许发生的事情是加载项(这是我的猜测)与一些隐藏的 window 相关联,现在客户必须解决的问题涉及两者,最后一本书的 window(现已关闭)以及与加载项关联的 window。