无法关闭EXCEL.EXE进程
我在做从EXCEL中导入数据的时候用了以下三个控件:
ExcelApplication1: TExcelApplication;
ExcelWorksheet1: TExcelWorksheet;
ExcelWorkbook1: TExcelWorkbook;
但是,我用以下语句,在系统进统里仍有EXCEL.EXE这个进程,
ExcelWorksheet1.Disconnect ;
ExcelWorkbook1.Disconnect ;
ExcelWorkbook1.Close;
ExcelApplication1.Disconnect;
ExcelApplication1.Quit;
EParam :=Unassigned;
DocuType :=Unassigned;
我的代码如下:
procedure TFrmGroupManage.FlatButton5Click(Sender: TObject);
var
i,j,DoubleCount,Ord_Qty : integer;
EParam,DocuType : OleVariant;
wkbk : _WorkBook;
sqlstr :string;
ExeHandle:Thandle;
begin
opendialog1.InitialDir:=ExtractFileDir(paramstr(0));
//文件打开的初始路径
if opendialog1.Execute then
begin
Try
ExcelApplication1.Connect;
Except
msshow('Excel文件打开失败!');
Exit;
End;
ExcelApplication1.Visible[0]:=False;
ExcelApplication1.Caption:='Excel数据文件';
EParam:=EmptyParam;
DocuType:=0;
try
wkBk:=ExcelApplication1.Workbooks.Add(EParam, DocuType);
wkBk:=ExcelApplication1.WorkBooks.Open(opendialog1.FileName,EmptyParam,EmptyParam,
EmptyParam,EmptyParam,EmptyParam,EmptyParam,
EmptyParam,EmptyParam,
EmptyParam,EmptyParam,DocuType,EmptyParam,DocuType);
ExcelWorkbook1.ConnectTo(ExcelApplication1.ActiveWorkbook);//ExcelWorkbook1与Eexcelapplication1建立连接
ExcelWorksheet1.ConnectTo(ExcelWorkbook1.Worksheets[1] as _Worksheet);//Excelworksheet1与Excelworkbook1建立连接
except
begin
ExcelWorkbook1.Close; //出现异常情况时关闭
ExcelApplication1.Disconnect;
ExcelApplication1.Quit;
msshow('导入EXCEL数据表格失败!');
exit;
end;
end;
//开始从EXCEL中取数,放到stringgrid中,取完数后关闭EXCEL
try
for i:=11 to 50 do
begin
if trim(excelworksheet1.cells.item[i,1])<>'' then
begin
GroupD.Insert;
GroupD.FieldByName('Item_No').AsInteger :=GroupD.RecordCount +1;
GroupD.fieldbyname('Single_No').AsString := GroupM.fieldbyname('Single_No').AsString;
GroupD.FieldByName('ShipTicketNo').asstring :=GroupD.fieldbyname('Single_No').AsString+'-'+inttostr(GroupD.RecordCount+1);
GroupD.FieldbyName('UserName').asstring :=UserName ;
GroupD.FieldByName('Luggage').AsInteger :=0;
GroupD.FieldByName('Weight').AsInteger :=0;
GroupD.FieldByName('IsThrough').AsBoolean :=FlatCheckBox4.Checked ;
GroupD.FieldByName('ischk').AsBoolean :=False ;
GroupD.FieldByName('IsLeave').AsBoolean :=False ;
GroupD.FieldByName('E_Ticket').AsBoolean :=False ;
GroupD.FieldByName('Cons').AsBoolean :=False ;
GroupD.fieldbyname('OriDate').AsString := GroupM.fieldbyname('OriDate').AsString;
GroupD.fieldbyname('OriHB').AsString := GroupM.fieldbyname('OriHB').AsString;
GroupD.fieldbyname('Camer').AsString := GroupM.fieldbyname('Camer').AsString;
GroupD.fieldbyname('FlightNo').AsString := GroupM.fieldbyname('FlightNo').AsString;
GroupD.fieldbyname('Origin').AsString := GroupM.fieldbyname('Origin').AsString;
GroupD.fieldbyname('Dest').AsString := GroupM.fieldbyname('Dest').AsString;
GroupD.fieldbyname('Type').AsString := GroupM.fieldbyname('Type').AsString;
GroupD.fieldbyname('Ticket').AsString := GroupM.fieldbyname('Ticket').AsString;
GroupD.fieldbyname('U_Price').AsString := GroupM.fieldbyname('U_Price').AsString;
GroupD.fieldbyname('SurName').value:=ExcelWorksheet1.Cells.Item[i,5];
GroupD.FieldByName('GivenName').value :=ExcelWorksheet1.Cells.Item[i,6];
GroupD.FieldByName('PassportNo').value :=ExcelWorksheet1.Cells.Item[i,7];
GroupD.fieldbyname('DateOfBidh').value:=ExcelWorksheet1.Cells.Item[i,8];
GroupD.FieldByName('Nationality').value :=ExcelWorksheet1.Cells.Item[i,9];
GroupD.Post;
end
end;
finally
msshow('数据导入完毕!');
end;
try
ExcelWorksheet1.Disconnect ;
ExcelWorkbook1.Disconnect ;
ExcelWorkbook1.Close;
ExcelApplication1.Disconnect;
ExcelApplication1.Quit;
EParam :=Unassigned;
DocuType :=Unassigned;
except
end;
end;