我一直在使用 .xlsx 文件运行 excel 导出功能。有时在加载 excel 文件时,我会使用 System.Runtime.InteropServices.Marshal.BindToMoniker() 方法。当有问题的文件未打开但存在时,我得到以下结果:
Excel 将启动,但不会加载工作簿,也不会加载任何工作表。Excel 显示为空白。
在执行导出的程序之外打开文件时,它以完全相同的方式加载。Excel 已打开,窗口顶部显示 Microsoft Excel,但没有可见工作表。Excel 看起来根本没有打开任何东西。
进入选项还表明没有打开工作簿。该文件肯定有内容,当我在 Notepad++ 中打开它时可以看到该文件有足够的细节让我看到工作簿中有工作表,但没有显示。
我不确定如何以编程方式防止这种损坏发生,或者如何修复它。任何建议或想法将不胜感激!
为了避免这个问题,我从不在关闭的 Excel 文件上使用 BindToMoniker(通过检查文件是否被锁定,如果它被解锁,我只使用 open 函数)
这是我遇到此问题时运行的代码。仅当文件存在且未打开时才会发生:
Public Function OpenExcelFile( _
ByRef pobjExcel As Excel.Application, _
ByRef pwkbWorkBook As Excel.Workbook, _
ByVal pstrFileName As String) As Boolean
...
pwkbWorkBook = BindToMoniker(pstrFileName)
pobjExcel = pwkbWorkBook.Parent
pobjExcel.Visible = True 'Temp; I use this to see the state of the file