本人数据库中有11个数据表,想把每个表中特定的列数据(包括字段) 全部导入到excel表中(11个数据表用循环导入)
求完整代码或者例子

解决方案 »

  1.   

    如一次数据处理,直接用查询分析器或DTS处理
    如要写代码,可搜索以前帖子,关键是数据写入EXCEL的方法
    1、将EXCEL看作一张DB表,通过ADO连接,用SQL Insert
    2、通过OLE方式操作EXCEL
      

  2.   

    http://www.delphifans.com/infoView/Article_74.html  
    看看这个
      

  3.   

    http://hi.baidu.com/swgweb/blog/item/6543838b9c0a82d6fd1f10b6.html
      

  4.   

     怎么个关联法,11张表总得有条件连接吧?说个思路:
    1、先把你需要的列字段整到一张表中(这个方法比较笨,但是管用。如果数据量不是很大的情况下);
    2、然后就是纯导出excel操作了。
      

  5.   

    导出非常简单。将表格中的数据按行列直接存成txt文件就可以了,注意将DBGrid各个单元格中的数据转化为字符串后以#9分隔。而且效率非常高!我这个关键提示,绝对比直接给你写代码还好。
      

  6.   

    说错了,更正如下:将表格中的数据按行列直接存成XLS文件就可以了(纯文本格式,用Excel.exe即可打开),注意将DBGrid各个单元格中的数据转化为字符串后以#9分隔。 
      

  7.   

    发一个DELPHI控制Excel的代码,供参考:在数据库应用软件的开发过程中,经常需要的数据转换成Excel文字,让用户作进一步的数据处理。而Borland Delphi是开发数据库应用系统的常用工具,如何在Delphi中操作Excel呢? 我们知道,在Microsoft office软件中有一种内嵌的编程语言,即VBA,它是一种宏语言、VB的子集。利用它,你可以编写出功能强大的代码,如打开文件、修改数据、保存数据、设置字体等。另一方面,Microsoft office软件中的宏能以VBA代码的形式记录下你的操作过程,因此借助宏操作,可以很轻松地实现某一功能,并把这些代码稍作修改嵌入你的软件中。但是VBA有一个缺点,它必需有Microsoft office操作平台,在哪里编写,必须在哪里执行。例如在Excel下编写的一段VBA代码,则它只有在Excel下才能执行。 关于Excel中的VBA编程方法、Excel对象属性、方法说明可以在Microsoft office的安装(完全安装)目录下的VBAXL8.hlp帮助文件中找到。 因此,只有把VBA代码嵌入到Borland Delphi中,才能实现用Delphi操作Excel。 下面,以Delphi为例,说明这种调用方法。 Unit excel; Interface Uses   Windows,Messages,SysUtils,Classes,Graphics,Controls,Forms,Dialogs,StdCtrls,ComObj,   { ComObj是操作OLE对象的函数集} Type   TForm1=class(TForm) Button1:TButton; Procedure Button1Click(Sender:Tobject);   Private  { Private declaration}   Public  { Public declaration }   end;   var   Form1:Tform1;  Implementation {$R *.DFM} procedure TForm1.Button1Click(sender:Tobject); var   eclApp,WordBook:Variant;  {声明为OLE Automation对象}   xlsFileName:string; begin   xlsFileName:=’ex.xls’;   try     {创建OLE对象:Excel Application与WordBook} eclApp:=CreateOleObject(‘Excel.Application’); WorkBook:=CreateOleObject(Excel.Sheet’);   Except Application.MessageBox(‘你的机器没有安装Microsoft Excel’, ’使用Microsoft Excel’,MB_OK+MB_ICONWarning); Exit;   End;   Try ShowMessage(‘下面演示:新建一个XLS文件,并写入数据,并关闭它。’); WorkBook:=eclApp.workbooks.Add; EclApp.Cells(1,1):=’字符型’; EclApp.Cells(2,1):=’Excel文件’; EclApp.Cells(1,2):=’Money’; EclApp.Cells(2,2):=10.01; EclApp.Cells(1,3):=’日期型’; EclApp.Cells(2,3):=Date; WorkBook.SaveAS(xlsFileName); WorkBook.close; ShowMessage(‘下面演示:打开刚创建的XLS文件,并修改其中的内容,然后,由用户决定是否保存。’); Workbook:=eclApp.WorkBooks.Open(xlsFileName); EclApp.Cells(1,4):=’Excel文件类型’; If MessageDlg(xlsFileName+’已经被修改,是否保存?’, mtConfirmation,[mbYes,mbNo],0)=mrYes then   WorkBook.Save Else   WorkBook.Saved:=True;  {放弃保存} Workbook.Close; EclApp.Quit;   //退出Excel Application {释放Variant变量} eclApp:=Unassigned;   except ShowMessage(‘不能正确操作Excel文件。可能是该文件已被其他程序打开,或系统错误。’); WorkBook.close; EclApp.Quit; {释放Variant变量} eclApp:=Unassigned;   end; end; end.      了解了上述操作过程后,我们就可以很容易地将数据库中的数据转换成Excel文件。
      

  8.   

        delphi中必须熟练的掌握excel的导入导出操作!。。
      

  9.   

    用第三方控件:cxgrid 开头使用 uses cxgridexportlink;导出按钮直接可以写
    procedure TfrmDaGongYiZhiZuo.cxButton5Click(Sender: TObject);
    var
      filename:string;
    begin
       if SaveDialog1.Execute then
       begin
          filename:=SaveDialog1.FileName;
          ExportGridToExcel(filename,cxGrid2,True,True,True,'xls');
          showmessage('数据导出成功!');
       end;
    end;
    很方便的
      

  10.   

    把DBGrid导出到Excel表格(支持多Sheet){
    功能描述:把DBGrid输出到Excel表格(支持多Sheet)
    调用格式:CopyDbDataToExcel([DBGrid1, DBGrid2]);
    }
    procedure CopyDbDataToExcel(Args: array of const);
    var
      iCount, jCount: Integer;
      XLApp: Variant;
      Sheet: Variant;
      I: Integer;
    begin
      Screen.Cursor := crHourGlass;
      if not VarIsEmpty(XLApp) then
      begin
        XLApp.DisplayAlerts := False;
        XLApp.Quit;
        VarClear(XLApp);
      end;  try
        XLApp := CreateOleObject(‘Excel.Application‘);
      except
        Screen.Cursor := crDefault;
        Exit;
      end;  XLApp.WorkBooks.Add;
      XLApp.SheetsInNewWorkbook := High(Args) + 1;  for I := Low(Args) to High(Args) do
      begin
        XLApp.WorkBooks[1].WorkSheets[I+1].Name := TDBGrid(Args[I].VObject).Name;
        Sheet := XLApp.Workbooks[1].WorkSheets[TDBGrid(Args[I].VObject).Name];    if not TDBGrid(Args[I].VObject).DataSource.DataSet.Active then
        begin
          Screen.Cursor := crDefault;
          Exit;
        end;    TDBGrid(Args[I].VObject).DataSource.DataSet.first;
        for iCount := 0 to TDBGrid(Args[I].VObject).Columns.Count - 1 do
          Sheet.Cells[1, iCount + 1] :=
        TDBGrid(Args[I].VObject).Columns.Items[iCount].Title.Caption;    jCount := 1;
        while not TDBGrid(Args[I].VObject).DataSource.DataSet.Eof do
        begin
          for iCount := 0 to TDBGrid(Args[I].VObject).Columns.Count - 1 do
            Sheet.Cells[jCount + 1, iCount + 1] :=
          TDBGrid(Args[I].VObject).Columns.Items[iCount].Field.AsString;      Inc(jCount);
          TDBGrid(Args[I].VObject).DataSource.DataSet.Next;
        end;
        XlApp.Visible := True;
      end;
      Screen.Cursor := crDefault;
    end; 
      

  11.   

    dbgrid保存到excel 速度超快http://hi.baidu.com/gykthh/blog/item/067d217efd2c300128388add.html
      

  12.   

    www.tsinghuabaodi.com 这里有个控件,您可参考下
      

  13.   

    直接用  dbgridEH 控件即可
      

  14.   

    下面是我在D7上使用的,你看看可以吗??
    ___________________________________________________________________procedure TForm1.BitBtn8Click(Sender: TObject);
    var
          range,sheet,v,workbook,ABC:Variant;//声明为OLE   Automation   对象
          xlsFileName,ny,jd,nyr,YZK:string;
          i,j,n,ii:integer;
      begin
          if   SaveDialog1.Execute   then
          begin   
          xlsFileName:=SaveDialog1.FileName;   
          if   fileexists(SaveDialog1.FileName)   then   DeleteFile(SaveDialog1.FileName);   
          try   
              //创建OLE对象Excel   Application与   WorkBook
             // ExcelApplication1.Connect;
            //  ExcelWorkbook1.connect;
             v:=CreateOleObject('Excel.Application');
             WorkBook:=CreateOleobject('Excel.Sheet');
          except
              ShowMessage('您的机器里未安装Microsoft   Excel。');
              Exit;
          end;
          try          Screen.Cursor:=crHourGlass;
              WorkBook:=v.workBooks.Add;
              i:=2;   //EXECL表行号
              n:=0;//query字段N序号      progressbar1.visible:=true;
          ADOQuery11.Close;
          ADOQuery11.SQL.Clear;
          ADOQuery11.SQL.Add('select 日期,班次,到达车次,到达方向,出发车次,出发方向,到达辆数,');
          ADOQuery11.SQL.Add('北区,磁莱,泰肥,济远,张远,德远,山远,哈沈,莱钢,莱芜东,颜庄,常庄,青远,南区,');
          ADOQuery11.SQL.Add('邹城,界河,滕州,官桥,枣庄,前亭,徐上,徐下,东区,地方,临远,日照,济宁,西区,菏泽,');
          ADOQuery11.SQL.Add('新远,月远,兖州,PP,CC,NN,BB,GG,WW,XX from fxcl where 日期=:a order by 班次,df,hh');
          ADOQuery11.Parameters.ParamByName('a').value :=FormatDateTime('yyyy-mm-dd' ,dpt2.Date);
          ADOQuery11.Active:=true;
          ADOQuery11.first;          j:=1;     v.worksheets[1].range['A1:AT1'].Merge(abc);     v.cells(1,1):='兖州北站十八点数据--车流方向统计报表';
         v.worksheets[1].Rows[1].HorizontalAlignment:=3;
         v.ActiveSheet.Rows[1].Font.Name := '黑体';
         v.ActiveSheet.Rows[1].Font.Color := clred;
         v.ActiveSheet.Rows[1].Font.Bold := True;
         v.ActiveSheet.Rows[1].Font.UnderLine := True;
         v.ActiveSheet.Rows[1].Font.size:=30;     v.ActiveSheet.Rows[2].Font.Name := '仿宋';
         v.ActiveSheet.Rows[2].Font.Color := clBlue;
         v.ActiveSheet.Rows[2].Font.Bold := True;
         v.ActiveSheet.Rows[2].Font.UnderLine := True;
         v.ActiveSheet.Rows[2].Font.size:=10;     v.Cells(2,1):='日期';
         v.Cells(2,2):='班次';
         v.Cells(2,3):='到达车次';
         v.Cells(2,4):='到达方向';
         v.Cells(2,5):='出发车次';
         v.Cells(2,6):='出发方向';
         v.Cells(2,7):='到达辆数';
         v.Cells(2,8):='北区';
         v.Cells(2,9):='磁莱';
         v.Cells(2,10):='泰肥';
         v.Cells(2,11):='济远';
         v.Cells(2,12):='张远';
         v.Cells(2,13):='德远';
         v.Cells(2,14):='山远';
         v.Cells(2,15):='哈沈';
         v.Cells(2,16):='莱钢';
         v.Cells(2,17):='莱芜东';
         v.Cells(2,18):='颜庄';
         v.Cells(2,19):='常庄';
         v.Cells(2,20):='青远';
         v.Cells(2,21):='南区';
         v.Cells(2,22):='邹城';
         v.Cells(2,23):='界河';
         v.Cells(2,24):='滕州';
         v.Cells(2,25):='官桥';
         v.Cells(2,26):='枣庄';
         v.Cells(2,27):='前亭';
         v.Cells(2,28):='徐上';
         v.Cells(2,29):='徐下';
         v.Cells(2,30):='东区';
         v.Cells(2,31):='地方';
         v.Cells(2,32):='临远';
         v.Cells(2,33):='日照';
         v.Cells(2,34):='济宁';
         v.Cells(2,35):='西区';
         v.Cells(2,36):='菏泽';
         v.Cells(2,37):='新远';
         v.Cells(2,38):='月远';
         v.Cells(2,39):='兖州';
         v.Cells(2,40):='P';
         v.Cells(2,41):='C';
         v.Cells(2,42):='N';
         v.Cells(2,43):='B';
         v.Cells(2,44):='G';
         v.Cells(2,45):='W';
         v.Cells(2,46):='X';                i:=3;   //EXECL表行号
                    n:=0;//query字段N序号
       ii:=1;
      progressbar1.min:=0;
      progressbar1.max:=adoquery11.RecordCount+1;          while   not   ADOQuery11.Eof   do   begin
                          j:=1;//EXECL表列号
                          progressbar1.Position:=ii;
                  for   n:=0   to   ADOQuery11.FieldCount   -1   do
                      begin
                      YZK:=ADOQuery11.fields[n].asstring;
                      if YZK='0' then  YZK:='';
                          v.Cells(i,j):=YZK;
                          j:=j+1;
                      end;
                  ADOQuery11.Next;
                  i:=i+1;
                  end;
              progressbar1.visible:=false;
              WorkBook.SaveAs(xlsFileName);
              Application.MessageBox('数据已生成成EXCEL!','完成',mb_ok+mb_iconinformation);
              WorkBook.close;
              v.Quit;//退出Excel   Application
             // v:=Unassigned;//释放VARIANT变量
              Screen.Cursor:=crdefault;
          except
              ShowMessage('不能正确操作Excel文件。可能是该文件已被其他程序打开,或系统错误。');   
              WorkBook.close;   
              v.Quit;   
              //释放VARIANT变量   
           //   v:=Unassigned;
          end;   
      END;
      END;
    ___________________________________________________________________
      

  15.   

    邹建大哥寫的:if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[p_exporttb]') and OBJECTPROPERTY(id, N'IsProcedure') = 1) 
    drop procedure [dbo].[p_exporttb] 
    GO /*--数据导出EXCEL 导出查询中的数据到Excel,包含字段名,文件为真正的Excel文件 
    如果文件不存在,将自动创建文件 
    如果表不存在,将自动创建表 
    基于通用性考虑,仅支持导出标准数据类型 --邹建 2003.10(引用请保留此信息)--*/ /*--调用示例 p_exporttb @sqlstr='select * from 地区资料' 
    ,@path='c:\',@fname='aa.xls',@sheetname='地区资料' 
    --*/ 
    create proc p_exporttb 
    @sqlstr varchar(8000), --查询语句,如果查询语句中使用了order by ,请加上top 100 percent 
    @path nvarchar(1000), --文件存放目录 
    @fname nvarchar(250), --文件名 
    @sheetname varchar(250)='' --要创建的工作表名,默认为文件名 
    as  
    declare @err int,@src nvarchar(255),@desc nvarchar(255),@out int 
    declare @obj int,@constr nvarchar(1000),@sql varchar(8000),@fdlist varchar(8000) --参数检测 
    if isnull(@fname,'')='' set @fname='temp.xls' 
    if isnull(@sheetname,'')='' set @sheetname=replace(@fname,'.','#') --检查文件是否已经存在 
    if right(@path,1)<>'\' set @path=@path+'\' 
    create table #tb(a bit,b bit,c bit) 
    set @sql=@path+@fname 
    insert into #tb exec master..xp_fileexist @sql --数据库创建语句 
    set @sql=@path+@fname 
    if exists(select 1 from #tb where a=1) 
    set @constr='DRIVER={Microsoft Excel Driver (*.xls)};DSN='''';READONLY=FALSE' 
         +';CREATE_DB="'+@sql+'";DBQ='+@sql 
    else 
    set @constr='Provider=Microsoft.Jet.OLEDB.4.0;Extended Properties="Excel 8.0;HDR=YES' 
    +';DATABASE='+@sql+'"' --连接数据库 
    exec @err=sp_oacreate 'adodb.connection',@obj out 
    if @err<>0 goto lberr exec @err=sp_oamethod @obj,'open',null,@constr 
    if @err<>0 goto lberr --创建表的SQL 
    declare @tbname sysname 
    set @tbname='##tmp_'+convert(varchar(38),newid()) 
    set @sql='select * into ['+@tbname+'] from('+@sqlstr+') a' 
    exec(@sql) select @sql='',@fdlist='' 
    select @fdlist=@fdlist+',['+a.name+']' 
    ,@sql=@sql+',['+a.name+'] ' 
    +case  
    when b.name like '%char'  
    then case when a.length>255 then 'memo' 
    else 'text('+cast(a.length as varchar)+')' end 
    when b.name like '%int' or b.name='bit' then 'int' 
    when b.name like '%datetime' then 'datetime' 
    when b.name like '%money' then 'money' 
    when b.name like '%text' then 'memo' 
    else b.name end 
    FROM tempdb..syscolumns a left join tempdb..systypes b on a.xtype=b.xusertype 
    where b.name not in('image','uniqueidentifier','sql_variant','varbinary','binary','timestamp') 
    and a.id=(select id from tempdb..sysobjects where name=@tbname) if @@rowcount=0 return select @sql='create table ['+@sheetname 
    +']('+substring(@sql,2,8000)+')' 
    ,@fdlist=substring(@fdlist,2,8000) exec @err=sp_oamethod @obj,'execute',@out out,@sql 
    if @err<>0 goto lberr exec @err=sp_oadestroy @obj --导入数据 
    set @sql='openrowset(''MICROSOFT.JET.OLEDB.4.0'',''Excel 8.0;HDR=YES 
    ;DATABASE='+@path+@fname+''',['+@sheetname+'$])' exec('insert into '+@sql+'('+@fdlist+') select '+@fdlist+' from ['+@tbname+']') set @sql='drop table ['+@tbname+']' 
    exec(@sql) 
    return lberr: 
    exec sp_oageterrorinfo 0,@src out,@desc out 
    lbexit: 
    select cast(@err as varbinary(4)) as 错误号 
    ,@src as 错误源,@desc as 错误描述 
    select @sql,@constr,@fdlist 
    go 
      

  16.   

    SQL還可以:EXEC master..xp_cmdshell 'bcp 数据库名.dbo.表名 out "c:\test.xls" /c -/S"服务器名" /U"用户名" -P"密码"'
    如果从SQL数据库中,导出数据到Excel,如果Excel文件已经存在,而且已经按照要接收的数据创建好表头,就可以简单的用:
    insert into OPENROWSET('MICROSOFT.JET.OLEDB.4.0'
    ,'Excel 5.0;HDR=YES;DATABASE=c:\test.xls',sheet1$)
    select * from 表