Excel COM 服务器BUG?
Excel COM server BUG?
Excel 版本 15 (2013),在 Windows 8.
重现步骤:
- 以编程方式打开 Excel 和一个 XLA 文件。
- 确保没有打开其他工作簿。
- 设置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。
Excel 版本 15 (2013),在 Windows 8.
重现步骤:
- 以编程方式打开 Excel 和一个 XLA 文件。
- 确保没有打开其他工作簿。
- 设置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。