怎样将adoquery查询后的记录,单击后保存或输出为excel文件!!急!要实例!给分!不在意分,现在是救急,谢了!!!要实例!!要实例!!要实例![email protected]

解决方案 »

  1.   


    interfaceuses
      Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
      Dialogs, DB, ADODB, StdCtrls, OleServer, Excel2000, Grids, DBGrids,
      DBClient;type
      TForm1 = class(TForm)
      private
        { Private declarations }
      public
        procedure WriteExcel(AdsData: Tclientdataset; sName, Title: string);
          { Public declarations }
      end;var
      Form1: TForm1;implementation{$R *.dfm}PROCEDURE Tform1.WriteExcel(AdsData:Tclientdataset; sName, Title: string);
    var
      ExcelApplication1: TExcelApplication;
      ExcelWorksheet1: TExcelWorksheet;
      ExcelWorkbook1: TExcelWorkbook;
      i, j: integer;
      filename: string;
    begin
      filename := concat(sName, '.xls');
      try
        ExcelApplication1 := TExcelApplication.Create(Application);
        ExcelWorksheet1 := TExcelWorksheet.Create(Application);
        ExcelWorkbook1 := TExcelWorkbook.Create(Application);
        ExcelApplication1.Connect;
      except
        Application.Messagebox('Excel没有安装!','Hello',MB_ICONERROR + mb_Ok);
        Abort;
       end;
       try
         ExcelApplication1.Workbooks.Add(EmptyParam, 0);
         ExcelWorkbook1.ConnectTo(ExcelApplication1.Workbooks[1]);
         ExcelWorksheet1.ConnectTo(ExcelWorkbook1.Worksheets[1] as _worksheet);
         AdsData.First;
        for j := 0 to AdsData.Fields.Count - 1 do
        begin
          ExcelWorksheet1.Cells.item[3, j + 1] := AdsData.Fields[j].DisplayLabel;
          ExcelWorksheet1.Cells.item[3, j + 1].font.size :='10';
        end;
        for i := 4 to AdsData.RecordCount + 3 do
        begin
          for j := 0 to AdsData.Fields.Count - 1 do
          begin
            ExcelWorksheet1.Cells.item[i, j + 1] :=
            AdsData.Fields[j].Asstring;
            ExcelWorksheet1.Cells.item[i, j + 1].font.size := '10';
          end;
          AdsData.Next;
      end;
      ExcelWorksheet1.Columns.AutoFit;
      ExcelWorksheet1.Cells.item[1, 2] := Title;
      ExcelWorksheet1.Cells.Item[1, 2].font.size :='14';
      ExcelWorksheet1.SaveAs(filename);
      Application.Messagebox(pchar('数据成功导出'+ filename),'信息化建设部',mb_Ok);
      finally
        ExcelApplication1.Disconnect;
        ExcelApplication1.Quit;
        ExcelApplication1.Free;
        ExcelWorksheet1.Free;
        ExcelWorkbook1.Free;
      end;
    end;end.
    一个 函数搞定
      

  2.   

    怎样将adoquery查询后的记录,单击后保存或输出为excel文件!!急!要实例!给分!不在意分,现在是救急,谢了!!!我是初学者看不太清楚,能不能发个实例来让我看看,只要能完成这个功能的就行在此多谢了!!![email protected]
      

  3.   

    tiexinliu(铁心刘) 怎样将adoquery查询后的记录,单击后保存或输出为excel文件!!急!要实例!给分!不在意分,现在是救急,谢了!!!我是初学者看不太清楚,能不能发个实例来让我看看,只要能完成这个功能的就行在此多谢了!!![email protected]
      

  4.   

    按上位大侠供的代码放到程序中,假设你的Query名为Query1,按钮为Button1,则
    在Button1.click中加入如下代码即可:
    WriteExcel(Query1,'c:\temp.xls','EXCEL电子表格');
    其中,c:\temp.xls为保存文件名,'EXCEL电子表格'为标题.
      

  5.   

    用存储过程:
    create procedure to_excel
      @sql varchar(500)
    as
    declare  @cmd varchar(500)
     set @cmd  = 'bcp  "' +rtrim(@sql)+'" queryout  c:\temp.xls  -c -S you_servername -U sa -P you_password'
     exec  master..xp_cmdshell @cmdGO
      

  6.   

    tiexinliu(铁心刘) 方法真的很不错!五个星呀,重量级呀!!
      

  7.   

    tiexinliu(铁心刘) 方法真的很不错!五个星呀,重量级呀!!你是说 hmily1688(流浪在中国_戒网中...) 写的码吗??你说好我一点也不懂!!是你发代码给我的吗?你的邮件是什么,写对了我把分给你!!!
      

  8.   

    tiexinliu (18)的方法是好方法,但是导出多条数据时太慢了.
      

  9.   

    晕菜,发邮件的是我啊liutaotao168#163.com是这个数据吧