如题。

解决方案 »

  1.   

    你自己都没说清楚,要人怎么回你,有的SQL本身有这个功能.直接导出来就行了,要用SQL导的话你到DELPHIBBS中查碧血剑的贴子吧
      

  2.   

    生成一个Excel文件(创建Excel文件的方法N多种,任选其一即可),把数据查出来,插进去,保存//呵呵,偶不嫌分少
      

  3.   

    分加给我
    在USE中加ComObjfunction TFrm_student.S_IsFileInUse(FileName : string ) : boolean;
    var
      HFileRes : HFILE;
    begin
      Result := false;
      if not FileExists(FileName) then
        exit;
      HFileRes := CreateFile(pchar(FileName), GENERIC_READ or GENERIC_WRITE,0, nil, OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL, 0);
      Result := (HFileRes = INVALID_HANDLE_VALUE);
      if not Result then
        CloseHandle(HFileRes);
    end;procedure TFrm_student.suiButton11Click(Sender: TObject);
    Var
      ExcelApp:Variant;
      SaveDialog1: TSaveDialog;
      i,j,row,column:integer;
    begin
      //dm.Apps.Get_Seek_Result(querystr,1);
      with dm.ClientDataSet1 do begin
      querycount:=RecordCount;
       close;open;
      if dm.ClientDataSet1.IsEmpty then
      begin
        ShowMessage('没有数据需要存盘!');//test
        Exit;
      end;
      SaveDialog1:= TSaveDialog.Create(nil);
      SaveDialog1.Filter := 'Excel 文件 (*.xls)|*.xls';
      SaveDialog1.Title:='确定另存为excel的文件名';
      if savedialog1.Execute Then
        begin
          while S_IsFileInUse(savedialog1.FileName) do
          begin
            case Application.MessageBox(PChar('无法存盘,'+string(ExtractFileName(savedialog1.FileName))+'正在使用中'), '请确认', MB_ICONQuestion+MB_ABORTRETRYIGNORE+MB_DEFBUTTON2) of
              IDAbort:
                begin
                  SaveDialog1.Free;
                  Exit;
                end;
              IDRetry:
                begin
                  continue;
                end;
              IDIgnore:
                begin
                  if Not savedialog1.Execute then break;
                end;
            end;
          end;
        end
      else
        begin
          SaveDialog1.Free;
          exit;
        end;//if
       try
        ExcelApp:=CreateOleObject('Excel.Application');//首先创建 Excel 对象,使用ComObj
       except
        Application.Messagebox('Excel没有安装!','Hello',MB_ICONERROR + mb_Ok);
        Abort;
       end;//end try
      try
        ExcelApp.Visible := False;//显示当前窗口
        ExcelApp.Caption := '应用程序调用 Microsoft Excel';//更改 Excel 标题栏
        ExcelApp.WorkBooks.Add;//添加新工作簿:
        ExcelApp.WorkSheets[ 'Sheet1' ].Activate;//设置第1个工作表为活动工作表
        ExcelApp.ActiveSheet.Rows[1].Font.Size:=10;
        ExcelApp.ActiveSheet.Rows[1].Font.Bold := True;
        row:=1;
        column:=1;
        for j:= 0 to dm.ClientDataSet1.FieldCount-1 do
          begin
            ExcelApp.Cells[row,column].Value:=dm.ClientDataSet1.Fields[j].DisplayLabel;
            column:=column+1;
          end;
        row:=2;
        while (Not dm.ClientDataSet1.Eof) and (Not dm.ClientDataSet1.IsEmpty) do
        begin
          column:=1;
          for i:=1 to dm.ClientDataSet1.FieldCount do
            begin
              ExcelApp.Cells[row,column].Value:=dm.ClientDataSet1.fields[i-1].AsString;
              column:=column+1;
            end;
          dm.ClientDataSet1.Next;
          row:=row+1;
        end;
        if Not S_IsFileInUse(savedialog1.FileName) then
          try
            ExcelApp.ActiveWorkBook.SaveAs(savedialog1.filename);
          except
            SaveDialog1.Free;
            ExcelApp.WorkBooks.Close;
            ExcelApp.Quit;
            ExcelApp:= Unassigned;
            exit;
          end;
        SaveDialog1.Free;
        ExcelApp.WorkBooks.Close;
        ExcelApp.Quit;
        ExcelApp:= Unassigned;
        Application.MessageBox('Excel文件导出成功!','成功',MB_OK);
      except
        SaveDialog1.Free;
        ExcelApp:= Unassigned;
      end;
      end;
    end;
      

  4.   

    懒人方法:用Sqlserver 的导入导出功能。
    快速,通吃,不用写代码。
      

  5.   

    给你个函数吧
    procedure myclass.ExportToExcel(DataSet: TDataSet;filename:string;SheetName:string;VisibleExcel:bool;pbr:tProgressbar);
    var
      myexcel:Variant;
      mysheet:Variant;
      range:variant;
      i,j:integer;
      //****************************
    begin
     try
        myexcel:=createoleobject('excel.application');
        myexcel.Visible :=VisibleExcel;
        myexcel.Workbooks.Add;//新建EXCEL文件
    //    myexcel.Workbooks[1].WorkSheets[1].Name:= '报表测试';
        // myexcel.Workbooks[1].WorkSheets[2].delete;
        // myexcel.Workbooks[1].WorkSheets[3].delete;
        // mySheet:= v.Workbooks[1].WorkSheets['报表测试'];//等效下面的语句
        mysheet:= myexcel.Workbooks[1].WorkSheets[1];
             //添加单元格内容
        with dataset do
        begin      pbr.Min :=0;
          pbr.Max:=recordcount;
          //列出字段名称。
          for j:=0 to FieldCount-1 do mysheet.cells[1,j+1]:=Fields[j].FieldName ;      for i:=0 to recordcount-1 do
          begin
            pbr.Position:=i;  //显示进度。
            for j:=0 to fieldcount-1 do
            begin
            
               mysheet.cells[2+i,1+j]:=dataset.Fields[j].AsString;
    //           mysheet.cells[2+i,1+j]:=vartostr(fields[j].Value );
               application.ProcessMessages ;
            end;
            next;
          end;
        end;
       { //*********************************设置报表外观 开始*******************************************
        //设置列标题
        Range := mysheet.Range['A1:O1'];//单元格从A2到M2
        Range.Rows.RowHeight :=25; //设置行高
        Range.Columns.ColumnWidth := 25; // 设置列宽
        Range.Borders.LineStyle := 1; //加边框
        //Range.FormulaR1C1 := '合并区';
        Range.HorizontalAlignment := 3;//xlCenter(水平对齐方式)
        Range.VerticalAlignment := 2;//xlCenter(垂直对齐方式)
        Range.Characters.Font.Name := '楷体';//字体
        Range.Characters.Font.FontStyle:= '加粗';
        Range.Characters.Font.Size := 15;
        Range.Characters.Font.OutlineFont := False;//是否有下划线
        Range.Characters.Font.ColorIndex := 1;//xlAutomatic//颜色
        //设置字段
        Range := mysheet.Range['A2:O'+inttostr(i)];//单元格从A2到M2
        Range.Rows.RowHeight :=15; //设置行高
        Range.Columns.ColumnWidth := 25; // 设置列宽
        Range.Borders.LineStyle := 0; //加边框
        Range.Characters.Font.Name := '宋体';//字体
        Range.Characters.Font.Size := 12;
        Range.Characters.Font.ColorIndex :=0;//xlAutomatic//颜色    //**********************************设置报表外观 结束**************************************** }//   myexcel.visible:=true;
        myexcel.WorkBooks[1].Close(True, filename);//取文件名退出
        myexcel.Quit;//退出EXCEL  Except
       //错误处理
        Showmessage('导出时出现错误!!!');
        myexcel.DisplayAlerts := false;//是否提示存盘
        myexcel.Quit;//退出EXCEL
        exit;
      end;
    //  Application.Restore;
    //  Application.BringToFront ;end;