前台:delphi7.0,是一个简单的程序,对数据实现排序汇总。
后台:access,数据表为data,包含6个字段,分别为a,b,c,d,e,f.
现在想要将DBGrid1中显示的数据导入到excel中,不知道语句怎么写,请大家帮忙?谢谢!!

解决方案 »

  1.   

    你是想把数据库里的数据直接全部导出到EXCEL里呢,还是说把数据库里的数据先显示在DBgrid中有时候要做一定的增减修改之后再导出到excel中呢?
      

  2.   

    DELPHI有操作WORD的库的,虽然不太好用,但简单的输入还是可以的
      

  3.   

    给你一篇文章:在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文件。
      

  4.   

    EXCEL的操作有多种方法,最常用的是通过OLE方式
    具体方法请搜以前帖子
      

  5.   


    //use comobj   ,要放一个savedialog
    procedure TRemind_F.Btn1Click(Sender: TObject);
    var
        excelApp,WorkBook:olevariant;
        xlsFileName:string;
        i,j:integer;
    begin
      if  dlgSave1.Execute  then
      begin
        xlsFileName:=dlgSave1.FileName;
      end else
      begin
        Exit;
      end;  try
        excelApp:=CreateOleObject('Excel.Application');
        WorkBook:=CreateOleObject('Excel.Sheet');
      except
        Application.MessageBox('系统没有安装Microsoft   Excel','Microsoft   Excel',MB_OK+MB_ICONWarning);
        Exit;
      end;  try
        //列名,字段名
        WorkBook:=excelApp.workbooks.Add;
        for   i:=0   to   dbg1.Columns.Count-1 do
        begin
          excelApp.Cells(1,i+1):=dbg1.Columns[i].Title.Caption;
        end;    dbg1.DataSource.DataSet.First;
        j:=2;
        while not dbg1.DataSource.DataSet.Eof do
        begin
          for   i:=0   to   dbg1.Columns.Count-1   do
          begin
            excelApp.Cells(j,i+1):=dbg1.Fields[i].Value;
          end;
          dbg1.DataSource.DataSet.Next;
          inc(j);
        end;    WorkBook.SaveAS(xlsFileName);
        WorkBook.close;
      except
        ShowMessage('文件导出失败!');
        Exit;
      end;
      Application.MessageBox('保存成功!','恭喜',MB_OK   +   MB_ICONINFORMATION);
    end;
      

  6.   

    一:用Ole自动化服务,创建一个OLE自动化对像
    二:用第三方控件,如Ehlib,dev express
      

  7.   

    没那么烦的,开头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;
      

  8.   

    EXCEL的操作有多种方法,最常用的是通过OLE方式.6楼的就是一个简单的例子。仔细看一下。
      

  9.   

    DEPHI第三方控件cxgrid,你可以上网直接下载用第三方控件包,组件,bpl,什么的,以后编程都会有很多规律性的东西,第三方控件会把很多代码写好的,你直接引用就行了,不像DEPHI自带的控件,真是写的累死了
      

  10.   


    你这个好像要装cxGrid吧。
      

  11.   

    procedure DBGridExportData(DBGridName: TDBGrid); //DBGrid导入Excel
    var
      myexcel: Variant;
      workbook: olevariant;
      worksheet: olevariant;
      i, j, n, t: Integer;
      SaveDialog: TSaveDialog;
      xlsFileName: string;
    begin
      if not DBGridName.DataSource.DataSet.Active then Exit;
      SaveDialog := TSaveDialog.Create(Application);
      SaveDialog.DefaultExt := '.xls';
      SaveDialog.Filter := 'Excel文件|*.xls|所有文件|*.*';
      if SaveDialog.Execute then
      begin
        xlsFileName := SaveDialog.FileName;
        //xlsFileName := 'apws.xls';
        try
          try
            myexcel := createoleobject('excel.application'); //
            myexcel.application.workbooks.add;
            myexcel.caption := '批发市场导出数据';
            workbook := myexcel.application.workbooks[1];
            worksheet := workbook.worksheets.item[1];
          except
            showmessage('不能建立 EXCEL !' + #13#10 + '请检查是否已经安装了 excell.');
            abort;
            exit;
          end;
          i := 1;
          j := 1;
          for n := 0 to DBGridName.FieldCount - 1 do
          begin
            if DBGridName.Columns[n].Visible then
            begin
              worksheet.cells(i, j) := DBGridName.Columns[n].Title.Caption;
              j := j + 1;
            end;
          end;
          with DBGridName.DataSource.DataSet do
          begin
            First;
            while not Eof do
            begin
              inc(i);
              n := 0;
              for j := 0 to DBGridName.FieldCount - 1 do
              begin
                if DBGridName.Columns[j].Visible then
                begin
                  t := j - n;
                  if isNumericEx(fieldbyname(DBGridName.Fields[j].FieldName).AsString) then
                    worksheet.cells[i, t + 1] := '''' + (fieldbyname(DBGridName.Fields[j].FieldName).AsString)
                  else
                    worksheet.cells[i, t + 1] := (fieldbyname(DBGridName.Fields[j].FieldName).AsString);
                end
                else
                  inc(n);
              end;
              Next;
            end;
          end;
          if FileExists(xlsFileName) then
          begin
            if Application.MessageBox('文件已经存在!' + #13 + #10 + '是否确定进行替换?' + #13 + #10 + #13 + #10 +
              '若选择"取消",则将在当前目录中' + #13 + #10 +
              '生成名为apwstemp.xls的临时文件', '提示', MB_OKCANCEL +
              MB_ICONQUESTION + MB_SYSTEMMODAL) = IDOK then
            begin
              DeleteFile(PChar(xlsFileName));
              workbook.SaveAs(xlsFileName);
              workbook.Close;
              myexcel.Quit;
              myexcel := Unassigned;
            end
            else
            begin
              if FileExists(PChar(ExtractFileDir(xlsFileName) + '\' + 'apwstemp.xls')) then
              begin
                DeleteFile(PChar(ExtractFileDir(xlsFileName) + '\' + 'apwstemp.xls'));
              end;
              WorkBook.SaveAs(ExtractFileDir(xlsFileName) + '\' + 'apwstemp.xls');
              WorkBook.Close;
              myexcel.Quit;
              myexcel := Unassigned;
            end;
          end
          else
          begin
            WorkBook.SaveAs(xlsFileName);
            WorkBook.Close;
            myexcel.Quit;
            myexcel := Unassigned;
          end;
        except
          Application.MessageBox('不能正确操作Excel文件!' + #13 + #10 + #13 + #10 + '可能是該文件已被其他程序打开, 或系統错误',
            '警告', MB_OK + MB_ICONSTOP + MB_SYSTEMMODAL);
          WorkBook.Close;
          myexcel.Quit;
          myexcel := Unassigned;
        end;
      end;
    end;
      

  12.   

    如果不是有特殊的要求,就用第三方控件,很方便.我有的就是dev express
      

  13.   

    楼上说的方法是对的>>>>>>>>>>>>>>>>>>>>>
    我以前就是这样引用的>>>>>>>>>>>>>>>>>>>>>
      

  14.   

    我曾经用过,好像是根据excel的格式写数据,当然只能写一个sheet,速度很快,用delphi提供的组件当数据很多时,超慢!!
      

  15.   

    用文件流来写入excel,速度很快的,具体方法我忘了,你可以查查!!