如何将DBGRID数据连同列名保存到EXCEL文件中?

解决方案 »

  1.   

    数据源是QUERY,可以这样:
    procedure TForm1.EXCEL2Click(Sender: TObject);
    var
      eclApp,WorkBook:Variant;//声明为OLE Automation 对象
      xlsFileName:string;
      i,j,n:integer;
    begin
      if SaveDialog1.Execute then
      begin
      xlsFileName:=SaveDialog1.FileName;
      if fileexists(SaveDialog1.FileName) then DeleteFile(SaveDialog1.FileName);
      try
        //创建OLE对象Excel Application与 WorkBook
        eclApp:=CreateOleObject('Excel.Application');
        WorkBook:=CreateOleobject('Excel.Sheet');
      except
        ShowMessage('您的机器里未安装Microsoft Excel。');
        Exit;
      end;
      try    Screen.Cursor:=crHourGlass;
        workBook:=eclApp.workBooks.Add;
        i:=1; //EXECL表行号
        n:=0;//query字段N序号
        Query1.First;
        j:=1;
        for n:=0 to Query1.FieldCount -1 do
            begin
              eclApp.Cells(i,j):=Query1.fields[n].DisplayLabel;
              j:=j+1;
            end;
           i:=2; //EXECL表行号
           n:=0;//query字段N序号
        while not Query1.Eof do begin
              j:=1;//EXECL表列号
          for n:=0 to Query1.FieldCount -1 do
            begin
              eclApp.Cells(i,j):=Query1.fields[n].AsString;
              j:=j+1;
            end;
          Query1.Next;
          i:=i+1;
          end;    WorkBook.SaveAs(xlsFileName);
        Application.MessageBox('操作在没有警告的情况下正常结束!','完成',mb_ok+mb_iconinformation);
        WorkBook.close;
        eclApp.Quit;//退出Excel Application
        eclApp:=Unassigned;//释放VARIANT变量
        Screen.Cursor:=crdefault;
      except
        ShowMessage('不能正确操作Excel文件。可能是该文件已被其他程序打开,或系统错误。');
        WorkBook.close;
        eclApp.Quit;
        //释放VARIANT变量
        eclApp:=Unassigned;
      end;
    END;
    END;
      

  2.   

    DevExpress Grid 自带此功能