把DBGrid中的数据写到Excel中,并保存为一个新的文件就可以了
至于报表的格式可以自己定

解决方案 »

  1.   

    打印要自己写了,导到EXCEL可如下:procedure TForm1.BitBtn1Click(Sender: TObject);
    var
      RangeE: Excel97.Range;
      I, Row: integer;
      Book: TBookStr;
    begin
      //create and show
      try
        ExcelApplication1.Visible [0] := true;
        ExcelApplication1.Workbooks.Add (null,0);
      except
        InformNoDB('没有安装Excel程序,所以不能导出!');
        exit;
      end;
      //fill the first row with field titles
      RangeE := ExcelApplication1.ActiveCell;
      for I := 0 to DataModule1.DataSet1.Fields.Count - 1 do
      begin
        RangeE.Value := DataModule1.DataSet1.Fields[I].DisplayLabel;
        RangeE := RangeE.Next;
      end;
      //add field data in folling rows
      DataModule1.DataSet1.DisableControls;
      try
        Book := DataModule1.DataSet1.Book;
        try
          DataModule1.DataSet1.First;
          Row := 2;
          while not DataModule1.DataSet1.Eof do
          begin
            RangeE := ExcelApplication1.Range ['A' + IntToStr (Row), 'A' + IntToStr (Row)];
            for I := 0 to DataModule1.DataSet1.Fields.Count - 1 do
            begin
              RangeE.Value := DataModule1.DataSet1.Fields[I].AsString;
              RangeE := RangeE.Next;
            end;
            DataModule1.DataSet1.Next;
            Inc (Row);
          end;    finally
          DataModule1.DataSet1.Book := Book;
        end;  finally
        DataModule1.DataSet1.EnableControls;
      end;
    end;
      

  2.   

    打印到报表好做,一般用quickrep就可以实现了,但是具体要求要你说明白一点。
    导入到excel的代码
      

  3.   

    这是程序员大本营2001里面一位高人dogbear2000写的代码,参考以下吧单元:uExcelTools
    作者:  Bear
    功能:保存数据集,如TTable,TQuery,TClientDataSet等为Excel文件,
              包含标题,可以只将一部分字段导出
              这一点通过设置DataSet中要不导出字段的Tag值大于某一个值来处理
    原理:调用 Microsoft Excel Ole对象
    调用方式: 
                    Function DataSetToExcel(
                        DataSet:TDataSet;FieldTagMax:Integer;
                          Visible:Boolean;ExcelFileName:String=''): Boolean;
    --------------------------------------------------------------------------------------------------}unit UExcelTools;interfaceuses
      classes, comctrls, stdctrls, windows, Dialogs, controls, SysUtils,
      Db,forms,DBClient,ComObj;//把数据集导入ExcelSheet的核心函数
    function DataSetToExcelSheet
                (
                DataSet    :TDataSet;
                FieldTagMax :Integer;  // 字段的Tag值如果大于这个值,就不导出到Excel
                Sheet      :OleVariant
                ): Boolean;//实际使用的函数,内部调用了DataSetToExcelSheet,在外面加入UI接口和错误处理
    function DataSetToExcel
                (
                DataSet    :TDataSet;  // 要转换的数据集
                FieldTagMax :Integer;  // 字段的Tag值如果大于这个值,就不导出到Excel
                Visible    :Boolean;      // 是否让做转换工作的Excel可见
                ExcelFileName:String='' // Excel文件名,*.xls
                ): Boolean;implementationFunction DataSetToExcelSheet(DataSet:TDataSet;FieldTagMax:Integer;Sheet:OleVariant): Boolean;
    var
      Row,Col,FieldIndex :Integer;
      BK:TBookMark;
    begin
      Result := False;
      if not Dataset.Active then exit;
      BK:=DataSet.GetBookMark;
      DataSet.DisableControls;  Sheet.Activate;
      try    // 列标题
        Row:=1;
        Col:=1;
        for FieldIndex:=0 to DataSet.FieldCount-1 do
            begin
            if DataSet.Fields[FieldIndex].Tag <= FieldTagMax then
                begin
                Sheet.Cells(Row,Col)  :=DataSet.Fields[FieldIndex].DisplayLabel;
                Inc(Col);
                end;
            end;
        // 表内容
        DataSet.First;
        while Not DataSet.Eof do
            begin
            Row:=Row+1;
            Col:=1;
            for FieldIndex:=0 to DataSet.FieldCount-1 do
                begin
                if DataSet.Fields[FieldIndex].Tag <= FieldTagMax then
                  begin
                  Sheet.Cells(Row,Col):=DataSet.Fields[FieldIndex].AsString;
                  Inc(Col);
                  end;
                end;
            DataSet.Next;
            end;    Result := True;
        finally
          DataSet.GotoBookMark(BK);
          DataSet.EnableControls;
        end;
    end;
    Function DataSetToExcel(
                      DataSet:TDataSet;FieldTagMax:Integer;
                      Visible:Boolean;ExcelFileName:String=''): Boolean;
    var
      ExcelObj, Excel, WorkBook, Sheet: OleVariant;
        OldCursor:TCursor;
      SaveDialog:TSaveDialog;
    begin
      Result := False;
      if not Dataset.Active then exit;  OldCursor:=Screen.Cursor;
      Screen.Cursor:=crHourGlass;  try
          ExcelObj := CreateOleObject('Excel.Sheet');
          Excel := ExcelObj.Application;
          Excel.Visible := Visible ;
          WorkBook := Excel.Workbooks.Add ;
          Sheet:= WorkBook.Sheets[1];
      except
          MessageBox(GetActiveWindow,'无法调用Mircorsoft Excel! '+chr(13)+chr(10)+
                        '请检查是否安装了Mircorsoft Excel。','提示',MB_OK+MB_ICONINFORMATION);
          Screen.Cursor:=OldCursor;
          Exit;
      end;  Result:=DataSetToExcelSheet(DataSet,FieldTagMax,Sheet) ;
      if Result then
          if Not Visible then
            begin
            if ExcelFileName<>''
                then WorkBook.SaveAs(FileName:=ExcelFileName)
                else begin
                    SaveDialog:=TSaveDialog.Create(Nil);
                    SaveDialog.Filter := 'Microsoft Excel 文件&brvbar;*.xls';
                    Result:=SaveDialog.Execute;
                    UpdateWindow(GetActiveWindow);
                    if Result then
                        WorkBook.SaveAs(FileName:=SaveDialog.FileName);
                    SaveDialog.Free;
                    end;
            Excel.Quit;
            end;
      Screen.Cursor:=OldCursor;
    end;end.