WinForms COM Exception, открывающая книгу Excel

Я пишу очень простое приложение WinForms с использованием VB.Net, все идет гладко, пока я не попытаюсь открыть файл Excel, который я написал в tempLocation через объект Stream (рабочая книга находится в ресурсах моего проекта, а для действия по сборке задано значение "Встроенный ресурс")

Вот код, который вызывает ошибку:

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 не было обработано
ErrorCode = -2146827284
HResult = -2146827284
Сообщение = Исключение из HRESULT: 0x800A03EC

Я проверил, и файл определенно создается, Excel работает и уже успешно открыл книгу на данный момент. Я не могу понять это вообще, поэтому любые указатели действительно приветствуются.


Обновить:

Файл (tempLocation) действительно существует в правильном месте, но когда я открываю его вне приложения, Excel выдает мне сообщение об ошибке "найдено нечитаемое содержимое". Файл по-прежнему успешно открывается и не имеет проблем после открытия. Теперь я могу обойти эту ошибку, используя CorruptLoad аргумент в Workbooks.Open() метод, но я чувствую, что это слепое игнорирование проблемы.

1 ответ

Если это поможет, вот пример простого приложения VB.NET, которое я написал давно для проверки скорости VB против C#. Это другой способ создания рабочей книги и записи в нее.

Imports Excel = Microsoft.Office.Interop.Excel

Public Class Form1

    Private Sub Button1_Click(sender As System.Object, e As System.EventArgs) Handles Button1.Click
        Dim xlApp As New Excel.Application
        Dim xlWorkBook As Excel.Workbook
        Dim xlWorkSheet As Excel.Worksheet
        Dim misValue As Object = System.Reflection.Missing.Value

        xlWorkBook = xlApp.Workbooks.Add(misValue)
        xlWorkBook.Application.Visible = True
        xlWorkBook.Application.ScreenUpdating = False

        xlWorkSheet = xlWorkBook.Sheets("sheet1")
        xlWorkSheet.SaveAs("C:\\vbexcel.xlsx")

        Dim l As Long
        l = 1
        Do While l < 500
            'xlWorkSheet.Cells(l, 1) = l
            xlWorkSheet.Range("A" & l).Value = l
            'xlWorkSheet.Cells(l, 2) = l
            'xlWorkSheet.Cells(l, 3) = l
            l = l + 1
        Loop

        xlWorkBook.Application.ScreenUpdating = True
        xlWorkBook.RefreshAll()
        xlWorkBook.Save()

        'xlWorkBook.Close()
        'xlApp.Quit()

        releaseObject(xlApp)
        releaseObject(xlWorkBook)
        releaseObject(xlWorkSheet)

        MsgBox("Done")
    End Sub

    Private Sub releaseObject(ByVal obj As Object)
        Try
            System.Runtime.InteropServices.Marshal.ReleaseComObject(obj)
            obj = Nothing
        Catch ex As Exception
            obj = Nothing
        Finally
            GC.Collect()
        End Try
    End Sub
End Class
Другие вопросы по тегам