我用的数据库是ms server200,在delphi中设置了查询,怎么把结果输出到excel中?

解决方案 »

  1.   

    使用TExcelApplicatoin就可以了,我回过好几个类似的帖子了,自己去搜索一把
      

  2.   

    给你源码吧
    Procedure Q_excel(C_Client:TADOQuery;D_Dbgrid:TDBgridEh;Gau:TGauge;filename:String;ExcelPanel:TPanel) ;
    var
     Excel,Sheet:Variant;
     i,X:integer;
    Begin
      Try
      Excel:=CreateOleObject('Excel.Application');
      Except
       Application.MessageBox('³öÏÖ´íÎó£¬Çë¼ì²éµçÄÔÊÇ·ñ°²×°excelÈí¼þ','Ìáʾ',MB_OK);
       ExcelPanel.Visible:=False;
       Exit;
      End;
      Excel.Visible :=false;
      Excel.Workbooks.Add;
      Excel.Workbooks[1].WorkSheets[1].Name :='test';
      Sheet:=Excel.Workbooks[1].WorkSheets[1];
      StopExcel:=False;
       for I:=0 to D_Dbgrid.Columns.Count-1 do
        Begin
    //     Sheet.Columns[i+1].ColumnWidth:=D_Dbgrid.Columns[i].Width;
         sheet.cells[1,I+1]:=D_Dbgrid.Columns[i].Title.Caption;
        End;
       Gau.MaxValue:=C_client.RecordCount;
       gau.Progress:=0;
       C_client.First;
       x:=1;
       While not C_client.Eof do
       Begin
         for I:=0 to D_Dbgrid.Columns.Count-1 do
          Begin
           Sheet.cells[x+1,I+1]:=D_Dbgrid.Columns.Items[i].Field.AsString;
          End;
          gau.Progress:=gau.Progress+1;
          x:=x+1;
          C_Client.Next;
          Application.ProcessMessages;
          If StopExcel then
           Begin
            If Application.MessageBox('ÊÇ·ñÍ£Ö¹µ¼³öÊý¾Ý¿â£¿','Ìáʾ',MB_yesno+MB_iconerror)=idyes then
             Begin
              Break;
             End
             Else
              StopExcel:=False;
           End;
        End;
       try
        Excel.ActiveWorkbook.SaveAs(filename);
       Except
        Excel.Quit;
       End;
       Excel.Quit;
       ExcelPanel.Visible:=False;
    End;
      

  3.   

    DELPHI中EXCEL组件的使用方法:
    一) 使用动态创建的方法首先创建 Excel 对象,使用ComObj:
    var ExcelApp: Variant;
    ExcelApp := CreateOleObject( 'Excel.Application' );1) 显示当前窗口:
    ExcelApp.Visible := True;2) 更改 Excel 标题栏:
    ExcelApp.Caption := '应用程序调用 Microsoft Excel';3) 添加新工作簿:
    ExcelApp.WorkBooks.Add;4) 打开已存在的工作簿:
    ExcelApp.WorkBooks.Open( 'C:\Excel\Demo.xls' );5) 设置第2个工作表为活动工作表:
    ExcelApp.WorkSheets[2].Activate;  
    或 
    ExcelApp.WorksSheets[ 'Sheet2' ].Activate;6) 给单元格赋值:
    ExcelApp.Cells[1,4].Value := '第一行第四列';7) 设置指定列的宽度(单位:字符个数),以第一列为例:
    ExcelApp.ActiveSheet.Columns[1].ColumnsWidth := 5;8) 设置指定行的高度(单位:磅)(1磅=0.035厘米),以第二行为例:
    ExcelApp.ActiveSheet.Rows[2].RowHeight := 1/0.035; // 1厘米9) 在第8行之前插入分页符:
    ExcelApp.WorkSheets[1].Rows.PageBreak := 1;10) 在第8列之前删除分页符:
    ExcelApp.ActiveSheet.Columns[4].PageBreak := 0;11) 指定边框线宽度:
    ExcelApp.ActiveSheet.Range[ 'B3:D4' ].Borders[2].Weight := 3;
    1-左    2-右   3-顶    4-底   5-斜( \ )     6-斜( / )12) 清除第一行第四列单元格公式:
    ExcelApp.ActiveSheet.Cells[1,4].ClearContents;13) 设置第一行字体属性:
    ExcelApp.ActiveSheet.Rows[1].Font.Name := '隶书';
    ExcelApp.ActiveSheet.Rows[1].Font.Color  := clBlue;
    ExcelApp.ActiveSheet.Rows[1].Font.Bold   := True;
    ExcelApp.ActiveSheet.Rows[1].Font.UnderLine := True;14) 进行页面设置:a.页眉:
        ExcelApp.ActiveSheet.PageSetup.CenterHeader := '报表演示';
    b.页脚:
        ExcelApp.ActiveSheet.PageSetup.CenterFooter := '第&P页';
    c.页眉到顶端边距2cm:
        ExcelApp.ActiveSheet.PageSetup.HeaderMargin := 2/0.035;
    d.页脚到底端边距3cm:
        ExcelApp.ActiveSheet.PageSetup.HeaderMargin := 3/0.035;
    e.顶边距2cm:
        ExcelApp.ActiveSheet.PageSetup.TopMargin := 2/0.035;
    f.底边距2cm:
        ExcelApp.ActiveSheet.PageSetup.BottomMargin := 2/0.035;
    g.左边距2cm:
        ExcelApp.ActiveSheet.PageSetup.LeftMargin := 2/0.035;
    h.右边距2cm:
        ExcelApp.ActiveSheet.PageSetup.RightMargin := 2/0.035;
    i.页面水平居中:
        ExcelApp.ActiveSheet.PageSetup.CenterHorizontally := 2/0.035;
    j.页面垂直居中:
        ExcelApp.ActiveSheet.PageSetup.CenterVertically := 2/0.035;
    k.打印单元格网线:
        ExcelApp.ActiveSheet.PageSetup.PrintGridLines := True;15) 拷贝操作:a.拷贝整个工作表:
        ExcelApp.ActiveSheet.Used.Range.Copy;
    b.拷贝指定区域:
        ExcelApp.ActiveSheet.Range[ 'A1:E2' ].Copy;
    c.从A1位置开始粘贴:
        ExcelApp.ActiveSheet.Range.[ 'A1' ].PasteSpecial;
    d.从文件尾部开始粘贴:
        ExcelApp.ActiveSheet.Range.PasteSpecial;16) 插入一行或一列:
    a. ExcelApp.ActiveSheet.Rows[2].Insert;
    b. ExcelApp.ActiveSheet.Columns[1].Insert;17) 删除一行或一列:
    a. ExcelApp.ActiveSheet.Rows[2].Delete;
    b. ExcelApp.ActiveSheet.Columns[1].Delete;18) 打印预览工作表:
    ExcelApp.ActiveSheet.PrintPreview;19) 打印输出工作表:
    ExcelApp.ActiveSheet.PrintOut;20) 工作表保存:
    if not ExcelApp.ActiveWorkBook.Saved then
       ExcelApp.ActiveSheet.PrintPreview;21) 工作表另存为:
    ExcelApp.SaveAs( 'C:\Excel\Demo1.xls' );22) 放弃存盘:
    ExcelApp.ActiveWorkBook.Saved := True;23) 关闭工作簿:
    ExcelApp.WorkBooks.Close;24) 退出 Excel:
    ExcelApp.Quit;(二) 使用Delphi 控件方法
    在Form中分别放入ExcelApplication, ExcelWorkbook和ExcelWorksheet。 1)  打开Excel 
    ExcelApplication1.Connect;2) 显示当前窗口:
    ExcelApplication1.Visible[0]:=True;3) 更改 Excel 标题栏:
    ExcelApplication1.Caption := '应用程序调用 Microsoft Excel';4) 添加新工作簿:
    ExcelWorkbook1.ConnectTo(ExcelApplication1.Workbooks.Add(EmptyParam,0));
     
    5) 添加新工作表:
    var Temp_Worksheet: _WorkSheet;
    begin
    Temp_Worksheet:=ExcelWorkbook1.
    WorkSheets.Add(EmptyParam,EmptyParam,EmptyParam,EmptyParam,0) as _WorkSheet;
    ExcelWorkSheet1.ConnectTo(Temp_WorkSheet);
    End;
     
    6) 打开已存在的工作簿:
    ExcelApplication1.Workbooks.Open (c:\a.xls
    EmptyParam,EmptyParam,EmptyParam,EmptyParam,
    EmptyParam,EmptyParam,EmptyParam,EmptyParam,
        EmptyParam,EmptyParam,EmptyParam,EmptyParam,0)7) 设置第2个工作表为活动工作表:
    ExcelApplication1.WorkSheets[2].Activate;  或
    ExcelApplication1.WorksSheets[ 'Sheet2' ].Activate;8) 给单元格赋值:
    ExcelApplication1.Cells[1,4].Value := '第一行第四列';9) 设置指定列的宽度(单位:字符个数),以第一列为例:
    ExcelApplication1.ActiveSheet.Columns[1].ColumnsWidth := 5;10) 设置指定行的高度(单位:磅)(1磅=0.035厘米),以第二行为例:
    ExcelApplication1.ActiveSheet.Rows[2].RowHeight := 1/0.035; // 1厘米11) 在第8行之前插入分页符:
    ExcelApplication1.WorkSheets[1].Rows.PageBreak := 1;12) 在第8列之前删除分页符:
    ExcelApplication1.ActiveSheet.Columns[4].PageBreak := 0;13) 指定边框线宽度:
    ExcelApplication1.ActiveSheet.Range[ 'B3:D4' ].Borders[2].Weight := 3;
    1-左    2-右   3-顶    4-底   5-斜( \ )     6-斜( / )14) 清除第一行第四列单元格公式:
    ExcelApplication1.ActiveSheet.Cells[1,4].ClearContents;15) 设置第一行字体属性:
    ExcelApplication1.ActiveSheet.Rows[1].Font.Name := '隶书';
    ExcelApplication1.ActiveSheet.Rows[1].Font.Color  := clBlue;
    ExcelApplication1.ActiveSheet.Rows[1].Font.Bold   := True;
    ExcelApplication1.ActiveSheet.Rows[1].Font.UnderLine := True;16) 进行页面设置:
     a.页眉:
        ExcelApplication1.ActiveSheet.PageSetup.CenterHeader := '报表演示';
    b.页脚:
        ExcelApplication1.ActiveSheet.PageSetup.CenterFooter := '第&P页';
    c.页眉到顶端边距2cm:
        ExcelApplication1.ActiveSheet.PageSetup.HeaderMargin := 2/0.035;
    d.页脚到底端边距3cm:
        ExcelApplication1.ActiveSheet.PageSetup.HeaderMargin := 3/0.035;
    e.顶边距2cm:
        ExcelApplication1.ActiveSheet.PageSetup.TopMargin := 2/0.035;
    f.底边距2cm:
        ExcelApplication1.ActiveSheet.PageSetup.BottomMargin := 2/0.035;
    g.左边距2cm:
        ExcelApplication1.ActiveSheet.PageSetup.LeftMargin := 2/0.035;
    h.右边距2cm:
        ExcelApplication1.ActiveSheet.PageSetup.RightMargin := 2/0.035;
    i.页面水平居中:
        ExcelApplication1.ActiveSheet.PageSetup.CenterHorizontally := 2/0.035;
    j.页面垂直居中:
        ExcelApplication1.ActiveSheet.PageSetup.CenterVertically := 2/0.035;
    k.打印单元格网线:
        ExcelApplication1.ActiveSheet.PageSetup.PrintGridLines := True;17) 拷贝操作:a.拷贝整个工作表:
        ExcelApplication1.ActiveSheet.Used.Range.Copy;b.拷贝指定区域:
        ExcelApplication1.ActiveSheet.Range[ 'A1:E2' ].Copy;c.从A1位置开始粘贴:
        ExcelApplication1.ActiveSheet.Range.[ 'A1' ].PasteSpecial;d.从文件尾部开始粘贴:
        ExcelApplication1.ActiveSheet.Range.PasteSpecial;18) 插入一行或一列:
    a. ExcelApplication1.ActiveSheet.Rows[2].Insert;
    b. ExcelApplication1.ActiveSheet.Columns[1].Insert;19) 删除一行或一列:
    a. ExcelApplication1.ActiveSheet.Rows[2].Delete;
    b. ExcelApplication1.ActiveSheet.Columns[1].Delete;20) 打印预览工作表:
    ExcelApplication1.ActiveSheet.PrintPreview;21) 打印输出工作表:
    ExcelApplication1.ActiveSheet.PrintOut;22) 工作表保存:
    if not ExcelApplication1.ActiveWorkBook.Saved then
       ExcelApplication1.ActiveSheet.PrintPreview;23) 工作表另存为:
    ExcelApplication1.SaveAs( 'C:\Excel\Demo1.xls' );24) 放弃存盘:
    ExcelApplication1.ActiveWorkBook.Saved := True;25) 关闭工作簿:
    ExcelApplication1.WorkBooks.Close;26) 退出 Excel:
    ExcelApplication1.Quit;
    ExcelApplication1.Disconnect;(三) 使用Delphi 控制Excle二维图
    在Form中分别放入ExcelApplication, ExcelWorkbook和ExcelWorksheet
    var asheet1,achart, range:variant;1)选择当第一个工作薄第一个工作表
    asheet1:=ExcelApplication1.Workbooks[1].Worksheets[1];2)增加一个二维图
    achart:=asheet1.chartobjects.add(100,100,200,200);3)选择二维图的形态
    achart.chart.charttype:=4;4)给二维图赋值
    series:=achart.chart.seriescollection;
    range:=sheet1!r2c3:r3c9;
    series.add(range,true);
     
    5)加上二维图的标题
    achart.Chart.HasTitle:=True;
    achart.Chart.ChartTitle.Characters.Text:=’ Excle二维图’
    第N次回答该问题
      

  4.   

    给你源码
    Procedure Q_excel(C_Client:TADOQuery;D_Dbgrid:TDBgridEh;Gau:TGauge;filename:String;ExcelPanel:TPanel) ;
    var
     Excel,Sheet:Variant;
     i,X:integer;
    Begin
      Try
      Excel:=CreateOleObject('Excel.Application');
      Except
       Application.MessageBox('³öÏÖ´íÎó£¬Çë¼ì²éµçÄÔÊÇ·ñ°²×°excelÈí¼þ','Ìáʾ',MB_OK);
       ExcelPanel.Visible:=False;
       Exit;
      End;
      Excel.Visible :=false;
      Excel.Workbooks.Add;
      Excel.Workbooks[1].WorkSheets[1].Name :='test';
      Sheet:=Excel.Workbooks[1].WorkSheets[1];
      StopExcel:=False;
       for I:=0 to D_Dbgrid.Columns.Count-1 do
        Begin
    //     Sheet.Columns[i+1].ColumnWidth:=D_Dbgrid.Columns[i].Width;
         sheet.cells[1,I+1]:=D_Dbgrid.Columns[i].Title.Caption;
        End;
       Gau.MaxValue:=C_client.RecordCount;
       gau.Progress:=0;
       C_client.First;
       x:=1;
       While not C_client.Eof do
       Begin
         for I:=0 to D_Dbgrid.Columns.Count-1 do
          Begin
           Sheet.cells[x+1,I+1]:=D_Dbgrid.Columns.Items[i].Field.AsString;
          End;
          gau.Progress:=gau.Progress+1;
          x:=x+1;
          C_Client.Next;
          Application.ProcessMessages;
          If StopExcel then
           Begin
            If Application.MessageBox('ÊÇ·ñÍ£Ö¹µ¼³öÊý¾Ý¿â£¿','Ìáʾ',MB_yesno+MB_iconerror)=idyes then
             Begin
              Break;
             End
             Else
              StopExcel:=False;
           End;
        End;
       try
        Excel.ActiveWorkbook.SaveAs(filename);
       Except
        Excel.Quit;
       End;
       Excel.Quit;
       ExcelPanel.Visible:=False;
    End;
      

  5.   

    ar
    aSheet:Variant;
    i:integer;begin
    //显示Ms-excel的执行过程
    ExcelApplication1.Visible[0]:=True;
    ExcelApplication1.WorkBooks.Add(xlWBATWorksheet,1);
    aSheet:=ExcelApplication1.Worksheets.Item[1];
    aSheet.cells[1,1].Value:='会员卡号';
    aSheet.cells[1,2].Value:='会员姓名';
    aSheet.cells[1,3].Value:='性别';
    aSheet.cells[1,4].Value:='身份证号';
    aSheet.cells[1,5].Value:='学历';//asheet.cells[20,1].Value:='总计';
    i:=2;
    with adoquerycustomer do
     begin  first;   while not eof do begin
      aSheet.cells[i,1].Value:=FieldbyName('hykh').Asstring;
      aSheet.cells[i,2].Value:=FieldbyName('name').Asstring;
      aSheet.cells[i,3].Value:=FieldbyName('sex').Asstring;
      aSheet.cells[i,4].Value:=FieldbyName('pass').Asstring;
      aSheet.cells[i,5].Value:=FieldbyName('knowledge').Asstring;
        i:=i+1;  next;
     //aSheet.SaveAs('d:\qqq.xls');
     // OleContainer1.CreateobjectFromFile('d:\qqq.xls',false);
    // aSheet.Application1.quit;  end;
    end;
    end;
      

  6.   

    看来来晚了兄弟们写得够详细不过我也说一说
    其实可以采用模板的方式可以让EXCEL所有的功能得以更大的利用还可以采用宏替换那可以使这些EXcel做得更漂亮
      

  7.   

    以上的方法都能实现,但有一种更快的方法,不妨一试 转载利用剪贴板实现高速导出数据到Excel    amei2000go(原作)  
      
    关键字     Excel 
      
        在很多的时候,我们需要将我们的数据导出到Excel中进行加工,在Access中有现成的工具可以实现
    可是在Delphi中却偏偏没有,无论如何我们需要这么一个工具,那么,事不宜迟,细细一想,最好的方法莫过
    于直接在程序中按照Excel的格式生成Excel文件,使用Ole技术直接调用Excel实例,由于第一种方法技术实现
    过于复杂,好在一般的计算机上已经安装了Office,在此就第二种方法“抛一块砖”。
        在此做一个示例以方便说明,我们考虑到导出数据有很多的情况是Master/Detail数据,因此就用两个
    TQuery和一个TDataSource,如果有更多的层次,只需要增加TQuery和TDataSource即可,以下使用了两个TQuery
    ,分别是:qryMaster和qryDetail,一个TDataSource:dsSource;
        步骤是:
                    1.建立一个Excel实例
                    2.创建一个工作表
                    3.创建一个TStringList,用来装数据
                    4.穷举数据表,将数据存入TStringList
                    5.将TStringList的数据复制到剪贴板
                    6.把剪贴板中的数据粘贴到Excel
         本方法的优点在于:比逐条写入到Excel中的速度大大提高,我曾试过,在P3933,256M的机器上用普通
    的方法,导出1000条数据大约需要2分钟,而该用本方法后只需要8秒。function ToExcel():boolean;
    var
        y       :integer;
        tsList  :TStringList;
        s       :string;
        aSheet  :Variant;
    begin
        result:=true;
        Excel.Connect;                  // 打开Excel
        Excel.Visible[0]:=true;         // 显示Excel
        Excel.Workbooks.Add(xlWBATWorksheet,0);
        aSheet:=excel.Worksheets.Item[1];    tsList:=TStringList.Create;
        try
            try
                with qryMaster do
                begin
                    Open;
                    First;
                    While Not Eof do
                    begin
                        s:='';
                        for y:=0 to FieldCount-1 do
                        begin
                            s:=s+Fields[y].AsString+#9;
                            Application.ProcessMessages;
                        end;
                        tsList.Add(s);
                        // 从表
                        if qryDetail<>nil then
                        begin
                            with qryDetail do
                            begin
                                Open;
                                First;
                                while Not Eof do
                                begin
                                    s:='';
                                    for y:=0 to FieldCount-1 do
                                    begin
                                        s:=s+Fields[y].AsString+#9;
                                        Application.ProcessMessages;
                                    end;
                                    tsList.Add(s);
                                    next;
                                end;
                            end;
                        end;
                        next;
                    end;
                    Close;
                end;
                Clipboard.AsText:=tsList.Text;
            except
                result:=false;
            end;
        finally
            tsList.Free;
        end;    Excel.Disconnect;
        aSheet.Paste;
        MessageBox(Application.Handle,'数据导出完毕!','系统提示',MB_ICONINFORMATION or MB_OK);
    end;