请有人协助我确定是我的基本错误。
我的目标是打开一个Excel电子表格(隐形),填充它,将其附加到电子邮件,发送和关闭所有内容。
接近完成,除了Excel在任务管理器中保持打开状态 - 在完成该过程之后。
代码块是:
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仍然在任务管理器中,并且由于该过程在一天中运行了几次,因此它们会在后台构建。
有人可以指导我解决问题或如何解决问题吗?
答案 0 :(得分:0)
关闭Excel时,可能是您的工作簿未关闭。如果您的工作簿已经保存,那么您可以使用Workbook关闭它们。关闭;否则,您可以在关闭它们之前将工作簿标记为已保存(Workbook.Saved:= True),或者当您关闭它们时可以使用以下命令关闭它们:
Workbook.Close(假);
false参数告诉Workbook关闭而不要求保存。关闭所有工作簿后,Excel应该正常退出。