Frage : Wie zur reinlichen Tötung ein Excel-Gegenstand vom Gedächtnis.

Alle wir haben ihm gesehen.  Dieses dumme EXCEL.EXE bleibt im Gedächtnis Resident, egal was Annäherung Sie nehmen.  Ich habe sogar mehrfache EXCEL.EXE Gegenstände gesehen, in der Prozessliste im Aufgabenmanager zu erscheinen, wenn tatsächlich mein Code nur ein Vorkommen öffnet.  Ich kam mit einer Weise, alles Excels vom Gedächtnis zu töten auf.  Ich hoffe, dass dieses Ihrer Qual im matter.

1 hilft:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
Imports System
Importe System.Diagnostics

Private Handgriffe printdocument1.EndPrint des Unterseeboot-printdocument1_EndPrint (ByVal Absender als Gegenstand, ByVal e als System.Drawing.Printing.PrintEventArgs)

        Tun, wenn zutreffend
            'allen Bewohner töten übertrifft im Gedächtnis mit extremem Vorurteil
            Wenn CloseAllResidentExcels () = dann ausrichten
                Ausgang tun
            Beenden wenn
        Schleife
        
        'reinit Ihre vars hier
        xlApp = C (CreateObject („Excel.Application“), Excel.Application)
        wbkToShow = xlApp.Workbooks.Add (XlWBATemplate.xlWBATWorksheet)
        wshToShow = DirectCast (wbkToShow.Worksheets („Sheet1“), Excel.Worksheet)

    Enden-Unterseeboot
    Private Funktion CloseAllResidentExcels () wie Boolesch

        CloseAllResidentExcels = falsch

        Versuch
            'diesen Prozess schlingen, bis es keine gültigen Identifikation gibt, zum zurückzugehen
            Prc als Prozess verdunkeln
            localByName als Prozess verdunkeln () = Process.GetProcessesByName („EXCEL“)
            Prc = Process.GetProcessById (localByName (0). Identifikation)
            Prc.Kill ()

        Fang ex als Ausnahme
            CloseAllResidentExcels = richten aus
        Enden-Versuch

    Enden-Funktion
Related Lösungen: excel, das in memory bleibt

Antwort : Wie zur reinlichen Tötung ein Excel-Gegenstand vom Gedächtnis.

ReleaseComObject und FinalReleaseComObject nicht immer arbeiten.  (Wenn sie überhaupt tun).  Dieses ist die einzige Weise, die ich gewesen bin, das ExcelApp ziemlich consistantly zu töten, in dem ich arbeite.  Dieses tötet kein anderes bereits-öffnen Excel-Akten….das nur man öffnete sich durch Ihre APP zu dieser Zeit, weil Sie Ihren ExcelApp Gegenstand führen.

Ich benutze den „Application.DoEvents ()“ Abschnitt gerade, um ihm eine kleine Menge Zeit zu geben zu schließen.  Sie können sie nicht benötigen.

1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
Funktion PostMessage Bibliothek „user32“ alias „PostMessageA“ erklären (ByVal hwnd als Int32, ByVal wMsg als Int32, _
    ByVal wParam als Int32, ByVal lParam als Int32) als Int32

Const WM_QUIT = &H12


Privates VorExcelWorker

    MyExcel als Microsoft.Office.Interop.Excel.ApplicationClass
    
    'Blabla - Blabla - Blabla tun Ihr ganzes Excel Stuffz

    MyExcel.Quit

    PostMessage (Excel.Hwnd, WM_QUIT, 0, 0)

    I als Int32 verdunkeln
    Für i = 0 bis 10000
        Application.DoEvents ()
    Zunächst

    MyExcel = nichts

Enden-Unterseeboot
Weitere Lösungen  
 
programming4us programming4us