Ich habe diesen Code:Excel Ole Objekt noch Prozessliste beenden, nachdem
function XlsToStringGrid(AGrid: TStringGrid; AXLSFile: string): Boolean;
const
xlCellTypeLastCell = $0000000B;
var
XLApp, Sheet: OLEVariant;
RangeMatrix: Variant;
x, y, k, r: Integer;
begin
Result:=False;
//Cria Excel- OLE Object
XLApp:=CreateOleObject('Excel.Application');
try
XLApp.Visible:=False;
XLApp.Workbooks.Open(AXLSFile);
Sheet:=XLApp.Workbooks[ExtractFileName(AXLSFile)].WorkSheets[1];
Sheet.Cells.SpecialCells(xlCellTypeLastCell, EmptyParam).Activate;
x:=XLApp.ActiveCell.Row;
y:=XLApp.ActiveCell.Column;
AGrid.RowCount:=x;
AGrid.ColCount:=y;
RangeMatrix:=XLApp.Range['A1', XLApp.Cells.Item[X, Y]].Value;
k:=1;
repeat
for r:=1 to y do
AGrid.Cells[(r - 1),(k - 1)]:=RangeMatrix[K, R];
Inc(k,1);
until k > x;
RangeMatrix:=Unassigned;
Result:=True;
finally
if not VarIsEmpty(XLApp) then
begin
Sheet:=Unassigned;
XLApp.Workbooks[ExtractFileName(AXLSFile)].Close;
XLApp.Quit;
XLAPP:=Unassigned;
end;
try freeandnil(XLAPP) except; end;
try freeandnil(Sheet) except; end;
end;
end;
aber nachdem er mit dem Befehl Beenden beenden, bleibt der Prozess noch in der Liste, Überlegungen: Ich Suche durchgeführt und verstanden, dass, wenn es Ein referenziertes Objekt bleibt in der Liste, aber ich glaube, dass ich alles freigegeben habe.
ich das Verhalten nicht reproduzieren können Sie beschreiben. Vielleicht verschwindet eine Sekunde nach dem Beenden der Anwendung Excel aus der Aufgabenliste. Wenn Sie 'Sheet.Cells.SpecialCells (xlCellTypeLastCell, EmptyParam) auskommentieren .Activate; [...] RangeMatrix: = Nicht zugewiesen;' erhalten Sie immer noch das Verhalten? Wenn Sie das tun, würde ich vermuten, dass es spezifisch für den Inhalt Ihres WorkBooks ist, so dass die Leser nicht weiterhelfen können, wenn Sie keinen Code zur Verfügung stellen, um sie von Grund auf neu zu erstellen. – MartynA
Wow, ich habe es in Teilen vergessen, ich habe es wirklich nicht versucht, jetzt nachdem ich die Aktionen kommentiert habe, bemerkte ich, dass die Variable RangeMatrix, die den Fehler erzeugt, den Prozess geöffnet zu bekommen, irgendeine Funktion hat, sie zu säubern? ohne nur Unassigned zu setzen? –
Ich kann Ihr Problem immer noch nicht reproduzieren. Ich glaube nicht, dass Leser bereitwillig eine Beispieltabelle herunterladen, die Malware enthalten könnte. Das einzige, was ich vorschlagen kann, ist, Ihrem q den Code hinzuzufügen, der notwendig ist, um eine Datei zu generieren, die das Problem aufweist. – MartynA