【发布时间】:2015-10-21 16:13:46
【问题描述】:
我正在使用 VB.Net 编写一个非常基本的 WinForms 应用程序,一切都很顺利,直到我尝试打开一个我通过 Stream 对象写入tempLocation 的 Excel 文件(工作簿在我的项目中资源和构建操作设置为“嵌入式资源”)
这是导致错误的代码:
Dim xlWBTemp As Excel.Workbook
Dim xlApp As Excel.Application
'// Below resolves to "C:\Users\MacroMan\LockTemplate.xlsm"
Dim tempLocation As String = Environ("USERPROFILE") & "\LockTemplate.xlsm"
...
xlWBTemp = xlApp.Workbooks.Open(tempLocation) '<~~ error here.
我得到的错误是:
System.Runtime.InteropServices.COMException 未处理
错误代码=-2146827284
HResult=-2146827284
消息=来自 HRESULT 的异常:0x800A03EC
我已经检查过,文件确实已创建,Excel 正在运行并且此时已成功打开工作簿。我根本无法弄清楚这一点,所以任何指针都非常受欢迎。
更新:
文件 (tempLocation) 确实存在于正确的位置,但是当我在应用程序之外打开它时,Excel 给了我“发现不可读的内容”错误。该文件仍然可以成功打开,并且打开后没有任何问题。我现在可以通过在Workbooks.Open() 方法中使用CorruptLoad 参数来解决这个错误,但我觉得这是盲目地忽略这个问题。
【问题讨论】:
-
你能在代码之外打开文件吗?这是一个好文件吗?
-
@varocarbas 这是用户选择文件的数组列表,该位工作正常。
-
@MatthewD 很好 - 我尝试从外部打开文件并收到“发现无法读取的内容”消息。然后文件打开,没有任何遗漏,功能齐全 - 那么我创建它的方式有什么问题吗?
-
@varocarbas
tempLocation是具有完整文件路径/名称的字符串 -
恕我直言,您最初发布的所有代码都与此问题相关,因为您的方法可能是导致问题的原因。
标签: vb.net winforms excel-interop