Warum lässt Microsoft.Office.Interop.Excel.Application.Quit () den Hintergrundprozess laufen?

9

Der folgende Code lässt einen Microsoft Excel-Hintergrundprozess ablaufen, bis mein Programm beendet wurde:

%Vor%

Warum? Was vermisse ich?

    
skinnysoftware 13.01.2015, 19:47
quelle

3 Antworten

18

Verstanden!

application.Workbooks! = application.Workbooks

Diese Eigenschaft stellt keine Variable zur Verfügung, sie generiert einen Wert. Jedes Mal, wenn ich auf die Workbooks-Eigenschaft zugreife, erstelle ich ein neues COM-Objekt.

Ich habe den Code korrigiert und alles ist gut. Danke, alle zusammen.

%Vor%     
skinnysoftware 13.01.2015, 20:46
quelle
5

Dies ist ein weit verbreitetes Problem bei Office-Anwendungen. Alle Excel-Add-Ins / Automatisierungsanwendungen sollten ihre Verweise auf Excel-Objekte systematisch freigeben, wenn sie nicht mehr benötigt werden. Wenn Sie den Verweis auf Excel-Objekte nicht systematisch freigeben, kann Microsoft Office Excel nicht ordnungsgemäß heruntergefahren werden. Weitere Informationen finden Sie unter Objekte systematisch freigeben . Es bezieht sich auf Outlook, aber die gleichen Prinzipien können auf alle Office-Anwendungen angewendet werden.

Verwenden Sie System.Runtime.InteropServices.Marshal.ReleaseComObject, um ein Excel-Objekt freizugeben, wenn Sie es nicht mehr verwenden. Setzen Sie dann in Visual Basic eine Variable auf Nothing (null in C #), um den Verweis auf das Objekt freizugeben.

    
Eugene Astafiev 13.01.2015 20:12
quelle
0

Das ist eine falsche Methode, dies zu tun , aber dies ist einfachste Möglichkeit, das Problem zu beheben :

%Vor%

Sie müssen nur alle nicht initialisierten Variablen initialisieren, wenn Sie damit arbeiten müssen, und CloseExcelApp () aufrufen, wenn Sie app schließen müssen.

    
Andrew 09.07.2016 14:50
quelle