点击导出按钮,填入文件名,点击保存,即可保存到**.xls中.不用出现excel的界面.数据有可能达到10万行,速度不能太慢,请大侠指点.

解决方案 »

  1.   

    SmExport组件中有一个ExportToXLS组件直接写Excel文件的,不是采用OLE的方法速度很快
      

  2.   

    一、简单的方法ClientDateSet.SaveToFile('ExcelName.XLS');
    二、用内存流来TMemoryStream做或文件流TFileStream
        基本思路:
           1.创建一个文件.
           4.用流对象将缓冲内的数据写入文件(WriteBuffer)
        可以参考一下DXGrid的原代码
      

  3.   

    to rustle() :不能使用第三方控件
    to wangshenwang1:第一种方法不行,第二种方法能不能再说清楚点,最好有源码.
      

  4.   

    To soyepp(大人物):  OLE的方法总归很慢,直接写文件总归很复杂  如果不想用空间你就去看SmExport的源码...
      

  5.   

    以下是我把DBGRID中的记录保存到Excel中,你从ClientDataSet中只要稍改就OK
    procedure GridToExcel(ADataSet : TADODataSet);
    var
      i, j, RowCnt : integer;
      XL, Xarr : Variant;
    begin
      Xarr := VarArrayCreate([1, ADataSet.FieldCount], VarVariant);
      XL := CreateOleObject('Excel.Application');
      XL.WorkBooks.Add;
      XL.Visible := True;
      j := 1;
      RowCnt := ADataSet.FieldCount;
      with ADataSet do
      begin
        First;
        DisableControls;
        while not eof do
        begin
          i := 1;
          while i <= RowCnt do
          begin
            Xarr[i] := Fields[i-1].Value;
            Inc(i);
          end;
          XL.Range['A' + IntToStr(j), CHR(64 + RowCnt) + IntToStr(j)].Value := Xarr;
          Next;
          Inc(j);
        end;
        EnableControls;
      end;
      XL.Range['A1',CHR(64 + RowCnt) + IntToStr(j)].Select;
      XL.Selection.Font.Name := '宋体';
      XL.Selection.Font.Size := 10;
      XL.selection.Columns.AutoFit;
      XL.Range['A1','A1'].Select;
    end;
      

  6.   

    To; Rabbit_Lap() 
    你的方法没有问题,但是数据量大的时候会很慢,并且我不需要Excel程序界面,直接保存成*.xls最好了.