Member 13890537 Ответов: 0

Как правильно закрыть excel в VB.NET-что?


Я совершенно новичок в программировании и люблю изучать новые вещи, особенно код. Не могли бы вы помочь мне решить эту проблему?Как правильно закрыть excel после его открытия? Я много искал, и есть разные способы, но каков правильный способ закрытия excel(release Excel COM objects). Это мой код. Пожалуйста, поправьте меня.

Dim xlApp As Excel.Application = Nothing
        Dim xlWorkBooks As Excel.Workbooks = Nothing
        Dim xlWorkBook As Excel.Workbook = Nothing
        Dim xlWorkSheet As Excel.Worksheet = Nothing
        Dim misValue As Object = System.Reflection.Missing.Value
        Dim t As Integer
        Dim s As Integer
        xlApp = New Excel.Application
        xlWorkBooks = xlApp.Workbooks
        xlWorkBook = xlWorkbooks.Add(xlPath)

        xlWorkSheet = xlWorkBook.Sheets("Payment Voucher Printing")

        xlWorkSheet.Cells(t + 3, s + 8) = VOUCHER_NUMBERTextBox.Text()
        xlWorkSheet.Cells(t + 6, s + 8) = DATE_OF_PAYMENTTextBox.Text()
       

        Try
            If MsgBox("WOULD YOU LIKE TO SEE THE DATA IN EXCEL?", MsgBoxStyle.YesNo) = MsgBoxResult.Yes Then


                xlWorkSheet.SaveAs(xlPath)                                    
                Process.Start(xlPath)
            Else

                            System.Runtime.InteropServices.Marshal.ReleaseComObject(xlApp.ActiveWorkbook)
                xlApp.ActiveWorkbook.Close()
                xlWorkBook = Nothing
                xlWorkBook.Close()
                xlApp.Quit()

          'releaseobject in reverse order


                ReleaseObject(xlWorkSheet)
                ReleaseObject(xlWorkBook)
                ReleaseObject(xlApp)
                Exit Sub
            End If
         
           System.Runtime.InteropServices.Marshal.ReleaseComObject(xlApp.ActiveWorkbook)
            xlApp.ActiveWorkbook.Close()

            'xlWorkBook = Nothing

            xlWorkBook.Close()
            xlApp.Quit()
            ReleaseObject(xlWorkSheet)
            ReleaseObject(xlWorkBook)
            ReleaseObject(xlApp)

        Catch ex As Exception

        End Try
    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


Что я уже пробовал:

Проблема в том, что когда я пытаюсь запустить это на другом компьютере, экспортированные данные теряются и даже линии сетки excel теряются.

Richard MacCutchan

Вы должны закрыть свою рабочую книгу и выйти из xlApp перед вызовом процесса.Начать.

Maciej Los

Я не могу воспроизвести ваш вопрос. Вы должны отладить свою программу.

Member 13890537

Хорошо, сэр, Спасибо за ваш ответ. У меня нет выбора, кроме как убить процесс и удалить какой-то код, например System.Runtime.InteropServices.Маршал.ReleaseComObject(xlApp.ActiveWorkbook)ниже else и end if. и просто убейте процесс.

Maciej Los

Взгляните на комментарий Ричарда. Может, он и прав.

0 Ответов