use activeX      //头文件中引用activex单元
    lcid:integer; //声明窗体级私有变量
加入TExcelApplication,Texcelworkbook,Texcelworksheet控件function ChangeToExcel(....
var i,j: Integer;
    MyArray:variant;
    M,N:INTEGER;
    FLD:STRING;
begin
  lcid := GetUserDefaultLCID;
  eapp.Disconnect;
  eapp.Connect;
  eapp.Visible[0]:=True;
  eWB.ConnectTo(eapp.Workbooks.Add(TOleEnum(xlWBATWorksheet), lcid));
  eWS.ConnectTo(ewb.Worksheets[1] as _Worksheet);
  q_result.first;
  q_result.DisableControls;
  IF q_result.FieldCount>26 THEN
  BEGIN
    M:= q_result.FieldCount DIV 26;
    N:= q_result.FieldCount MOD 26;
    IF N>0 THEN FLD:= chr(M+64)+chr(N+64)
    ELSE FLD:= chr(M-1+64)+'Z';
    END
  ELSE FLD:=chr(q_result.FieldCount+64);
  MyArray:=VarArrayCreate([0,(q_result.FieldCount-1)],varVariant);
  for i:=0 to q_result.Fieldcount-1 do
  begin
    MyArray[i]:= DBgrideh2.Columns[i].Title.Caption ;
  end;
  eWS.Range['A1', (FLD+'1')].Value := MyArray;
  for i:=2 to q_result.RecordCount+1 do
  begin
    for j:=0 to q_result.FieldCount-1 do
    begin
      MyArray[j]:= q_result.Fields[j].Value ;
    end;
    eWS.Range['A'+intTostr(i), (FLD+intTostr(i))].Value := MyArray;
    q_result.Next;
  end;
  q_result.EnableControls;
end;
//这段代码是以显式的方法把数据转入Excel,需要隐式转入,只需设Texcelapplication.visible:=false;
至于保存成文件,调用Texcelworksheet.saveas()方法即可