закрыть экземпляр excel, с которым не связана книга?

У меня открыт пустой экземпляр excel. Я хочу иметь возможность закрывать экземпляры excel, с которыми не связана книга.

Public xlsApp As Excel.Application
Public xlsWB As Excel.Workbook

public openExcel()
Try
   Dim path As String
   path = "C:excel.xlsm"
   xlsWB = xlsApp.Workbooks.Open(path)
   Catch ex As Exception
   My.Application.Log.WriteException(ex, TraceEventType.Error, "Additional information or details")
   Exit Sub
End Try
end sub

   Public 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

====when run will open one excel, if excel window is close, the instance stays on, you will see the blank excel workbook. I want to close that instance when this sub re runs.
public doThis()
    releaseObject(xlsApp)
    releaseObject(xlsWB)
    openExcel() <<== 
end sub

1 ответ

  1. Для правильного закрытия Excel необходимо выгрузить все COM-объекты

            Dim xl As Excel.Application = New Excel.Application()
            Dim wb As Excel.Workbook = xl.Workbooks.Add()
            Dim ws As Excel.Worksheet = wb.Worksheets.Add()
    
    
            wb.Close()
            xl.Quit()
            ReleaseComObject(ws)
            ReleaseComObject(wb)
            ReleaseComObject(xl)
            ws = Nothing
            wb = Nothing
            xl = Nothing
    

    Если вы не потребляете экземпляр Excel, и вы просто отображаете его, то, возможно, попробуйте это. Это убьет процесс, как только он будет создан, так что вы хотите, чтобы положить p.Kill()в другом месте. Также обратите внимание, что это убивает процесс, поэтому никакие изменения не будут сохранены.

    Dim p As System.Diagnostics.Process = System.Diagnostics.Process.Start(path)
    p.Kill()