use comobj;
createoleobject(excel.applicaton)

解决方案 »

  1.   

    procedure SavetoExcel(DBGrid1 : TDBGrid);
    var
      irange:excel97.range;
      iexcel:_application;
      i,row,ColCount:integer;
      book:tbook;
      EApp:TExcelApplication;
      FinshColName:string;
      dbgridname:Tdbgrid;
    begin
      //连接Excel
      dbgridname:=DBGrid1;
      EApp:=TExcelApplication.Create(nil);
      try
        try
          EApp.Connect;
        except
          application.MessageBox('本机没有安装Microsoft_Excel,不能用此功能','系统提示',0);
          raise;
        end;
        iexcel:=excel97.CoExcelApplication.create;  //创建 Excel
        iexcel.Visible[0]:=true;
        iexcel.Workbooks.add(null,0);   //创建 空库
        irange:=iexcel.activecell;
        irange:=iexcel.Range['A1','a1'];   //将光标定位
        begin
            for i:=0 to dbgridname.FieldCount - 1 do      //添加字段名
            begin
              irange.Value:=dbgridname.Columns[i].Title.Caption;
              irange:=irange.Next;
            end;
            dbgridname.DataSource.DataSet.DisableControls;
            try       //try1
             book:=dbgridname.DataSource.DataSet.GetBook;
             try      //try2
              dbgridname.DataSource.DataSet.First;
              row:=2;
              while not dbgridname.DataSource.DataSet.Eof do
                begin
                   irange:=iexcel.range['A'+inttostr(row),'A'+inttostr(row)];
                   for i:=0 to dbgridname.FieldCount - 1 do
                     begin
                        try
                          irange.NumberFormat:='@';
                          irange.value:=dbgridname.Fields[i].Text;
                        except
                       end;
                         irange:=irange.Next;
                     end; //for
                   dbgridname.DataSource.DataSet.Next;
                   inc(row);
                end;  //while
             finally   //try2
               dbgridname.DataSource.DataSet.GotoBook(book);
               dbgridname.DataSource.DataSet.FreeBook(book);
             end;  //try2
            finally  //try1
               dbgridname.DataSource.DataSet.EnableControls;
            end;    //try1
            ColCount:= dbgridname.FieldCount;
            if dbgridname.FieldCount>25 then
              FinshColName:=chr($40+(ColCount-1) div 26 )+chr($41+ (ColCount-1) mod 26)
            else
              FinshColName:=chr($41+ (ColCount-1) mod 26);
            irange:=iexcel.Range['A1',FinshColName+inttostr(row-1)];   //  选择数据范围
        end;
        irange.AutoFormat(2,null,null,null,null,null,null);  //0 无变化
        irange.Borders.LineStyle:=7;
        irange.Borders.Item[7].Weight:=3;
        irange.Borders.Item[8].Weight:=3;
        irange.Borders.Item[9].Weight:=3;
        irange.Borders.Item[10].Weight:=3;
        irange.Borders.Item[11].Weight:=2;
        irange.Borders.Item[12].Weight:=2;
        //irange.Borders.Item[3].Weight:=1;
      finally
        EApp.Free;
      end;
    end;
      

  2.   

    还有个简单的,直接保存为文本格式,扩展名为EXECL的扩展名
    然后把没条记录写入文件每个字段用TAB分隔

    1  2  3  4
    5  6  7  8
    就可以了