单独导出查询出来的数据已经可以了,但是我想在导出之前加上报表名称和查询条件,并一起导入到EXCEL,因为我不是一条条导出的,所以不知道该如何处理,请做过类似处理的兄弟姐妹告之小弟,代码如下:
procedure TfmRep1.spbExportClick(Sender: TObject);
var
  ExpClass: TDBGridEhExportClass;
  Ext: string;
begin  savedialog.FileName := '营业报表;
  if savedialog.Execute then
  begin
    case savedialog.FilterIndex of
      1:
        begin
          ExpClass := TDBGridEhExportAsXLS;
          Ext := 'xls';
        end;
      2:
        begin
          ExpClass := TDBGridEhExportAsHTML;
          Ext := 'htm';
        end;
      3:
        begin
          ExpClass := TDBGridEhExportAsText;
          Ext := 'txt';
        end;
      4:
        begin
          ExpClass := TDBGridEhExportAsCSV;
          Ext := 'csv';
        end;
      5:
        begin
          ExpClass := TDBGridEhExportAsRTF;
          Ext := 'rtf';
        end;
    else
      ExpClass := nil;
      Ext := '';
    end;
    if ExpClass <> nil then
    begin
      if UpperCase(Copy(savedialog.FileName, Length(savedialog.FileName) - 2, 3)) <> UpperCase(Ext) then
        savedialog.FileName := savedialog.FileName + '.' + Ext;
      try
        if Copy(ReverseString(savedialog.FileName), 1, 3) = 'slx' then
          SaveDBGridEhToExportFile(TDBGridEhExportAsHTML, dbgrideh, savedialog.FileName, true)
        else
          SaveDBGridEhToExportFile(ExpClass, dbgrideh, savedialog.FileName, true);
        showmessage('导出成功!');
      except
        showMessage('保存失败!');
      end;
    end;  end;end;

解决方案 »

  1.   

    procedure Ttcjl.dcClick(Sender: TObject);
    var ExcelApp: Variant;
    begin
    if DBGrid1.DataSource.DataSet.IsEmpty then
    begin
     showmessage('没有数据可以导出!');
     exit;
    end;
    ExcelApp := CreateOleObject( 'Excel.Application' );
    ExcelApp.Visible := True;
    ExcelApp.WorkBooks.Add(1);
    ExcelApp.Workbooks[1].WorkSheets[1].Name := 'sheet页的名称';
    exlDC(ExcelApp);
    end;procedure Ttcjl.exlDC(XLApp: Variant);
    var
      x,i: Integer;
      ExcelSheet: Variant;
    begin
      ExcelSheet := XLApp.Workbooks[1].WorkSheets[1];
      for i:=1 to DBGrid1.Columns.Count do
       with DBGrid1.Columns[i-1] do
       begin
        ExcelSheet.Columns[i].ColumnWidth:=DBGrid1.DataSource.DataSet.FindField(FieldName).DisplayWidth;
        ExcelSheet.Cells(3, i):=Title.Caption;
       end;
        ExcelSheet.Cells(1, 2):='第1行第2格的内容';
        ExcelSheet.Cells(2, 2):= '第2行第2格的内容';
      x:= 4;
      with DBgrid1.DataSource.DataSet do
      begin
       first;
       While Not EOF do
        begin
         for i:=1 to DBGrid1.Columns.Count do
          with DBGrid1.Columns[i-1] do
           begin
            ExcelSheet.Cells(x, i):=''''+FindField(FieldName).AsString;
           end;
          Next;
          x:= x + 1 ;
        end;
      end;
      ExcelSheet.Cells(x, 1):= '合计';
      ExcelSheet.Cells(x, 2):= '共'+'条记录';
      ExcelSheet.Cells(x, 3):= '用户数量:';
      ExcelSheet.Cells(x, 5):= '设备数量:';
      x:=x+1;
      ExcelSheet.Cells(x, 4):= '统计人:'+ CZYxm;
      ExcelSheet.Cells(x, 6):= '统计时间'+DateToStr(now);end;
      

  2.   

    只能这样一条条加上么?
    这样的话,DBGRIDEH多表头就出不来了吧?
      

  3.   

    我是 用 fastreport  3.0  导的