有人可以帮助我解决我确定的基本错误吗?
我的目标是打开 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 := '[email protected]';
IdMessage1.From.Domain := 'valid-email.co.uk';
IdMessage1.From.Text := 'Sage <[email protected]>';
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 仍保留在任务管理器中,并且随着该进程在一天中运行几次,它们会在后台累积。
有人可以指导我找到解决方案或如何解决问题吗?
关闭 Excel 时,可能您的工作簿未关闭。如果您的工作簿已保存,则可以使用 Workbook.Close 关闭它们;否则,您可以在关闭工作簿之前将其标记为已保存 (Workbook.Saved := True),或者当您关闭它们时,您可以使用以下命令关闭它们:
工作簿.关闭(False);
false 参数告诉工作簿关闭而不要求保存。关闭所有工作簿后,Excel 应正确退出。