在我的VB.Net Excel VSTO插件中,我在后台打开一堆excel文件以从中检索信息。用户不应该看到这个,也不应该与此互动。
这是通过创建Excel的新实例并使用以下代码加载文件来完成的:
Dim loadExcelInstance as Excel.Application = New Excel.Application()
loadExcelInstance.Visible = False
loadExcelInstance.Workbooks.Open("Path\To\File", False, True)
最后一部分是确保文件以只读方式打开。所有文件都在Excel中标记为Shared
。
会发生什么,是文件在后台读取,应该是这样,直到发生这种情况:
当加载一个特定文件时,loadExcelInstance.Visible
属性会突然变为True
,此工作簿以及所有其他工作簿在可见后打开。
在此可见窗口中,将显示工作簿本身,但通常在Excel中可见的功能区不会显示。
昨天,这发生在一本工作簿上。将此工作簿中的所有数据复制到新工作簿,以相同名称保存并删除旧工作簿后,行为恢复正常。
今天,这种情况发生在两本工作簿中。
有谁知道为什么会这样,以及我如何阻止它?
编辑:要在单独的测试代码中显示会发生什么:
Dim goodTestInstance = New Excel.Application()
goodTestInstance.Visible = False
goodTestInstance.AutomationSecurity = Microsoft.Office.Core.MsoAutomationSecurity.msoAutomationSecurityForceDisable
Dim badTestInstance = New Excel.Application()
badTestInstance.Visible = False
badTestInstance.AutomationSecurity = Microsoft.Office.Core.MsoAutomationSecurity.msoAutomationSecurityForceDisable
goodTestInstance.Workbooks.Open("Path\To\GoodFile.xlsm", False, True)
badTestInstance.Workbooks.Open("Path\To\BadFile.xlsm", False, True)
当代码到达好文件的开头时,它会在后台打开,因为它应该是。当代码到达坏文件的开头时,它会打开,但没有功能区。