delphi在数据库方面的应用俺真的很菜,请指教!现在我要把ACCESS中的数据给导出到EXCEL中,我该咋办呀?能给俺点例子吗?源代码最好了!谢谢,[email protected]

解决方案 »

  1.   

    我用的SQL server 2k 没用过access不敢妄讲
      

  2.   

    来自:yzhshi, 时间:2001-12-2 10:04:00, ID:758347[code]既然大家都在这里将自己的东西贴出来,那我就再贴一个,将DBGrid中的文件转换到Excel中或者转换到Txt中的控件。我自己编写的,希望大家讨论一下。unit DBGridExport;interfaceusesSysUtils, Classes, Graphics, Controls, Forms, Dialogs,StdCtrls, Db, DBGrids, Comobj, extctrls, comctrls, ActiveX;typeTSpaceMark = (csComma, csSemicolon, csTab, csBlank, csEnter);TDBGridExport = class(TComponent)privateFDB_Grid: TDBGrid; {读取DBGrid的源}FTxtFileName: string; {文本文件名}FSpaceMark: TSpaceMark; {间隔符号}FSpace_Ord: Integer; {间隔符号的Asc数值}FTitle: string; {显示的标题}FSheetName: string; {工作表标题}FExcel_Handle: OleVariant; {Excel的句柄}FWorkbook_Handle: OleVariant; {书签的句柄}FShow_Progress: Boolean; {是否显示插入进度}FProgress_Form: TForm; {进度窗体}FRun_Excel_Form: TForm; {启动Excel提示窗口}FProgressBar: TProgressBar; {进度条}function Connect_Excel: Boolean; {启动Excel}function New_Workbook: Boolean; {插入新的工作博}function InsertData_To_Excel: Boolean; {插入数据}procedure Create_ProgressForm(AOwner: TComponent); {创建进度显示窗口}procedure Create_Run_Excel_Form(AOwner: TComponent); {创建启动Excel窗口}procedure SetSpaceMark(Value: TSpaceMark); {设置导出时的间隔符号}protectedpublicconstructor Create(AOwner: TComponent); override; {新建}destructor Destroy; override; {销毁}function Export_To_Excel: Boolean; overload; {导出到Excel中}function Export_To_Excel(DB_Grid: TDBGrid): Boolean; overload;function Export_To_Txt(NewFile: Boolean = True): Boolean; overload; {导出到文本文件中}function Export_To_Txt(FileName: string; NewFile: Boolean = True): Boolean; overload;function Export_To_Txt(DB_Grid: TDBGrid; NewFile: Boolean = True): Boolean; overload;function Export_To_Txt(FileName: string; DB_Grid: TDBGrid; NewFile: Boolean = True): Boolean; overload;publishedproperty DB_Grid: TDBGrid read FDB_Grid write FDB_Grid;property Show_Progress: Boolean read FShow_Progress write FShow_Progress;property TxtFileName: string read FTxtFileName write FTxtFileName;property SpaceMark: TSpaceMark read FSpaceMark write SetSpaceMark;property Title: string read FTitle write FTitle;property SheetName: string read FSheetName write FSheetName;end;procedure Register;implementationprocedure Register;beginRegisterComponents('Stone', [TDBGridExport]);end;{-------------------------------------------------------------------------------}{新建}constructor TDBGridExport.Create(AOwner: TComponent);begininherited Create(AOwner);FShow_Progress := True;FSpaceMark := csTab;end;{销毁}destructor TDBGridExport.Destroy;beginvarClear(FExcel_Handle);varClear(FWorkbook_Handle);inherited Destroy;end;
      

  3.   

    谢谢 outer2000(天外流星) ,、不过我还是看不懂 !能说的再明白点吗?谢谢
      

  4.   


    > 全面控制 Excel 
    > 首先?建 Excel ?象,使用ComObj:
    > var ExcelID: Variant;
    > ExcelID := CreateOleObject( 'Excel.Application' );
    > 1) ?示?前窗口:
    > ExcelID.Visible := True;
    > 2) 更改 Excel ???:
    > ExcelID.Caption := '?用程序?用 Microsoft Excel';
    > 3) 添加新工作簿:
    > ExcelID.WorkBooks.Add;
    > 4) 打?已存在的工作簿:
    > ExcelID.WorkBooks.Open( 'C:ExcelDemo.xls' );
    > 5) ?置第2?工作表?活?工作表:
    > ExcelID.WorkSheets[2].Activate;  
    > 或 
    > ExcelID.WorksSheets[ 'Sheet2' ].Activate;
    > 6) ??元格?值:
    > ExcelID.Cells[1,4].Value := '第一行第四列';
    > 7) ?置指定列的?度(?位:字符??),以第一列?例:
    > ExcelID.ActiveSheet.Columns[1].ColumnsWidth := 5;
    > 8) ?置指定行的高度(?位:磅)(1磅=0.035厘米),以第二行?例:
    > ExcelID.ActiveSheet.Rows[2].RowHeight := 1/0.035; // 1厘米
    > 9) 在第8行之前插入分?符:
    > ExcelID.WorkSheets[1].Rows[8].PageBreak := 1;
    > 10) 在第8列之前?除分?符:
    > ExcelID.ActiveSheet.Columns[4].PageBreak := 0;
    > 11) 指定?框??度:
    > ExcelID.ActiveSheet.Range[ 'B3:D4' ].Borders[2].Weight := 3;
    > 1-左    2-右   3-?    4-底   5-斜(  )     6-斜( / )
    > 12) 清除第一行第四列?元格公式:
    > ExcelID.ActiveSheet.Cells[1,4].ClearContents;
    > 13) ?置第一行字体?性:
    > ExcelID.ActiveSheet.Rows[1].Font.Name := '??';
    > ExcelID.ActiveSheet.Rows[1].Font.Color  := clBlue;
    > ExcelID.ActiveSheet.Rows[1].Font.Bold   := True;
    > ExcelID.ActiveSheet.Rows[1].Font.UnderLine := True;
    > 14) ?行?面?置:
    > a.?眉:
    >     ExcelID.ActiveSheet.PageSetup.CenterHeader := '?表演示';
    > b.??:
    >     ExcelID.ActiveSheet.PageSetup.CenterFooter := '第&P?';
    > c.?眉到?端?距2cm:
    >     ExcelID.ActiveSheet.PageSetup.HeaderMargin := 2/0.035;
    > d.??到底端?距3cm:
    >     ExcelID.ActiveSheet.PageSetup.HeaderMargin := 3/0.035;
    > e.??距2cm:
    >     ExcelID.ActiveSheet.PageSetup.TopMargin := 2/0.035;
    > f.底?距2cm:
    >     ExcelID.ActiveSheet.PageSetup.BottomMargin := 2/0.035;
    > g.左?距2cm:
    >     ExcelID.ActiveSheet.PageSetup.LeftMargin := 2/0.035;
    > h.右?距2cm:
    >     ExcelID.ActiveSheet.PageSetup.RightMargin := 2/0.035;
    > i.?面水平居中:
    >     ExcelID.ActiveSheet.PageSetup.CenterHorizontally := 2/0.035;
    > j.?面垂直居中:
    >     ExcelID.ActiveSheet.PageSetup.CenterVertically := 2/0.035;
    > k.打印?元格网?:
    >     ExcelID.ActiveSheet.PageSetup.PrintGridLines := True;
    > 15) 拷?操作:
    > a.拷?整?工作表:
    >     ExcelID.ActiveSheet.Used.Range.Copy;
    > b.拷?指定?域:
    >     ExcelID.ActiveSheet.Range[ 'A1:E2' ].Copy;
    > c.?A1位置?始粘?:
    >     ExcelID.ActiveSheet.Range.[ 'A1' ].PasteSpecial;
    > d.?文件尾部?始粘?:
    >     ExcelID.ActiveSheet.Range.PasteSpecial;
    > 16) 插入一行或一列:
    > a. ExcelID.ActiveSheet.Rows[2].Insert;
    > b. ExcelID.ActiveSheet.Columns[1].Insert;
    > 17) ?除一行或一列:
    > a. ExcelID.ActiveSheet.Rows[2].Delete;
    > b. ExcelID.ActiveSheet.Columns[1].Delete;
    > 18) 打印??工作表:
    > ExcelID.ActiveSheet.PrintPreview;
    > 19) 打印?出工作表:
    > ExcelID.ActiveSheet.PrintOut;
    > 20) 工作表保存:
    > if not ExcelID.ActiveWorkBook.Saved then
    >    ExcelID.ActiveSheet.PrintPreview;
    > 21) 工作表另存?:
    > ExcelID.SaveAs( 'C:ExcelDemo1.xls' );
    > 22) 放?存?:
    > ExcelID.ActiveWorkBook.Saved := True;
    > 23) ??工作簿:
    > ExcelID.WorkBooks.Close;
    > 24) 退出 Excel:
    > ExcelID.Quit;


      

  5.   

    最简单的是用ehlib直接导入excel,不用你知道怎么控制excel,它全帮你做了
      

  6.   

    Function DataSetToTXT(DataSet:TDataSet;FileName:String):Boolean;
    var
      s:TStringList;
      str:string;
      i:integer;
      SaveDialog:TSaveDialog;
      BK:TBookMark;
    begin
         s:=TStringList.Create;
         BK:=DataSet.GetBookMark;
         DataSet.DisableControls;
         DataSet.First;
         while not DataSet.Eof do
         begin
             str:='';
             for i:=0 to DataSet.FieldCount-1 do
             begin
                 if str='' then
                   str:=str+DataSet.Fields[i].AsString
                 else str:=str+'|'+DataSet.Fields[i].AsString;
             end;
             s.Add(str);
             DataSet.Next;
         end;
         DataSet.GotoBookMark(BK);
         DataSet.EnableControls;
         SaveDialog:=TSaveDialog.Create(Nil);
         SaveDialog.Filter:='文本文件(*.txt)|*.txt';
         SaveDialog.Title:='将'+FileName+'数据表导出文本文件';
         SaveDialog.FileName:=FileName+'.txt';
         Result:=SaveDialog.Execute;
         UpdateWindow(GetActiveWindow);
         if Result then
           s.SaveToFile(SaveDialog.FileName);
         SaveDialog.Free;
         s.Free;
    end;
     
    Function 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='';FileName: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 文件(*.xls)|*.xls';
                    SaveDialog.Title:='将'+FileName+'数据表导出Excel文件';
                    SaveDialog.FileName:=FileName+'.xls';
                    Result:=SaveDialog.Execute;
                    UpdateWindow(GetActiveWindow);
                    if Result then
                      WorkBook.SaveAs(FileName:=SaveDialog.FileName);
                    SaveDialog.Free;
                end;
                Excel.Quit;
            end;
        Screen.Cursor:=OldCursor;
    end;
      

  7.   

    都用ODBC联好,就不用管什么格式了.