从Delphi中closuresExcel

有人会协助我肯定是我的一个基本的错误请。

我的目标是打开一个Excel电子表格(不可见),填充它,附加到电子邮件,发送和closures所有东西。

它接近完成,除了Excel在任务pipe理器中保持打开状态之后,stream程完成之后。

代码块是:

procedure TFMain.SendEmail; var i, j, r: Integer; vBody, vSaveVer: string; vAttach: TIdAttachment; vMftQty: array [1 .. 2] of Integer; vQtyTot: array [1 .. 12] of Integer; vNetTot: array [1 .. 12] of Real; oXL, oWB, oSheet: Variant; begin IdMessage1.From.Address := 'sage@valid-email.co.uk'; IdMessage1.From.Domain := 'valid-email.co.uk'; IdMessage1.From.Text := 'Sage <sage@valid-email.co.uk>'; IdMessage1.Subject := 'Sage'; try SQLQuery1.Close; SQLQuery1.SQL.Clear; SQLQuery1.SQL.Add('SELECT comp,dept,e_addr FROM acc_email WHERE dept="' + EMailQuery.FieldByName('Dept').Text + '"'); SQLQuery1.Open; while not SQLQuery1.Eof do begin IdMessage1.Recipients.EMailAddresses := EMailQuery.FieldByName('E_Addr').Text; SQLQuery2.Close; SQLQuery2.SQL.Clear; SQLQuery2.SQL.Add('SELECT * FROM invoice WHERE global_dept_number="' + EMailQuery.FieldByName('Dept').Text + '" ORDER BY account_ref, stock_code'); SQLQuery2.Open; oXL := CreateOleObject('Excel.Application'); oXL.DisplayAlerts := False; oWB := oXL.Workbooks.Add; while not SQLQuery2.Eof do begin oXL.Cells[r, 1].Value := 'Code'; oXL.Cells[r, 2].Value := 'Description'; oXL.Cells[r, j * 2 + 1].Value := 'Qty'; oXL.Cells[r, j * 2 + 2].Value := 'Value'; Inc(r); oWB.Worksheets.Add(After := oWB.Worksheets[oWB.Worksheets.Count]); oSheet := oWB.ActiveSheet; oSheet.Name := SQLQuery2.FieldByName('account_ref').Text; oXL.Cells[1, j * 2 + 1].Value := 'Month'; r := 2; SQLQuery2.Next; end; if oWB.Worksheets.Count > 1 then oWB.Worksheets.Item['Sheet1'].Delete; oWB.Worksheets[1].Select; oWB.SaveAs(vSave + EMailQuery.FieldByName('Dept').Text + '.xlsx'); SQLQuery1.Next; end; try if IdMessage1.Recipients.EMailAddresses <> '' then begin vAttach := TIdAttachmentFile.Create(IdMessage1.MessageParts, vSave + EMailQuery.FieldByName('Dept').Text + '.xlsx'); IdSMTP1.Connect; IdSMTP1.Send(IdMessage1); IdMessage1.Recipients.EMailAddresses := ''; IdMessage1.Body.Text := ''; end; finally if IdSMTP1.Connected then IdSMTP1.Disconnect; end; finally vAttach.Free; oSheet := Unassigned; oWB := Unassigned; oXL.Quit; oXL := Unassigned; end; end; 

然而,Excel仍然保留在任务pipe理器中,并且在一天中运行几次的过程中,它们build立在后台。

有人可以指导我解决问题或如何解决问题?

当您closuresExcel时,可能是您的工作簿未closures。 如果您的工作簿已保存,则可以使用Workbook.Closeclosures它们; 否则,可以在closures工作簿之前将其标记为已保存(Workbook.Saved:= True),或者在closures它们时closures它们:

Workbook.Close(假);

错误的参数告诉工作簿closures而不要求保存。 一旦所有的工作簿都closures,Excel应该正常退出。