怎样实现将DBGrid中显示的数据,显示或保存成Excel的格式?
那位大虾能给点意见,有没有这方面的书或网站都行》》》

解决方案 »

  1.   

    正好我在前面搜索这个论坛的时候搜到的,现在我已经放进我的博科里面了,你去看吧:
    http://pinyu.blogchina.com/blog/article_50413.205828.html
      

  2.   

    从dbgrid的数据集导出给你个demo,建立odbc为qq,导出sqlserver2000northwind数据库中的orders表数据,测试通过
    ----------
    unit Unit1;interfaceuses
      Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
      Dialogs, DB, ADODB, StdCtrls, ExcelXP, OleServer;type
      TForm1 = class(TForm)
        Button1: TButton;
        ExcelApp: TExcelApplication;
        ExcelQueryTable: TExcelQueryTable;
        ExcelBook: TExcelWorkbook;
        procedure Button1Click(Sender: TObject);
      private
        { Private declarations }
        function ToExcelFile(var Filename,SheetName,WIndowCaption:OleVariant;SqlStr:String):Boolean;
      public
        { Public declarations }
      end;var
      Form1: TForm1;implementation
         uses ComObj;
    {$R *.dfm}function TForm1.ToExcelFile(var Filename,SheetName,WindowCaption:OleVariant;SqlStr:String):Boolean;
    var
    NewTemplate,ItemIndex:olevariant;
    CurSheet:_WorkSheet;
    connectStr:olevariant;
    begin
    NewTemplate:=emptyParam;
    try
    try
    ExcelApp.Connect;
    except
    MessageDlg('您可能没有安装EXCEL', mtError, [mbOk], 0);
    Abort;
    end;
    ExcelApp.visible[0]:=TRUE;
    ExcelApp.Caption:=WindowCaption;
    ExcelApp.Workbooks.Add(Newtemplate,0);
    ExcelBook.ConnectTo(ExcelApp.workBooks.Item[1]);
    ExcelBook.Title[0]:=WIndowCaption;
    ExcelBook.Activate;
    CurSheet:=ExcelBook.Sheets[1] as _worksheet;
    CurSheet.Name:=SheetName;
    connectstr := 'ODBC;DSN=qq;';
    CurSheet.QueryTables.Add(connectstr,CurSheet.range['a3','e3'],SqlStr);
    ExcelQueryTable.ConnectTo(CurSheet.QueryTables.Item(1));
    ExcelQueryTable.Refresh;
    except
    on E: Exception do
    begin
    ItemIndex:=FALSE;
    ExcelBook.Close(ItemIndex);
    ExcelApp.Disconnect;
    ExcelApp.Quit;
    Application.MessageBox('数据输出到EXCEL过程出错,请检查EXCEL版本是否一致','警告',mb_ok);
    exit;
    end;
    end;
    ExcelQueryTable.Disconnect;
    ExcelBook.Disconnect;
    ExcelApp.Disconnect;
    Result:=TRUE;
    end;
    procedure TForm1.Button1Click(Sender: TObject);
    var XlsApp,XlsSheet,WndCaption:OleVariant;
    begin
       XlsApp:=OleVariant('c:\aa.xls');
       XlsSheet:=OleVariant('a');
       WndCaption:=OleVariant('test');
       ToExcelFile(XlsApp,XlsSheet,WndCaption,'select * from orders');end;end.---------------------ExcelApp.visible[0]:=false;就可以不打开excle窗口
    加入ExcelApp.Save(XlsApp);自动保存
      

  3.   


    procedure Tfrmptax.Button3Click(Sender: TObject);
      var  ExcelApp,WorkBook:OLEVariant;
           i,j :integer;
           xlsFileName:string;
           recycle_length:integer;
           s_date:string;   begin
       s_date:=edit2.Text;
       savedialog2.Execute;
       xlsFileName:=savedialog2.FileName ;
            if xlsfilename=''  then
            begin
            showmessage('操作成功取消!');
            end
            else
               begin
               if edit2.text=''then
               begin                with query4 do
                    begin
                    CommUtils.initialQuery(Query4,'select count(T_id),sum(T_taxable),sum(T_amountax) from tax');
                    open;
                    recycle_length:=query4.Fields[0].AsInteger ;                end;                progressbar1.Max := recycle_length;
                    progressbar1.position:=0;
                    try
                     ExcelApp:= CreateOleObject( 'Excel.Application' );
                     WorkBook:=CreateOleobject('Excel.Sheet');
                    except
                     application.Messagebox('无法打开Xls文件,请确认已 经安装EXCEL.','',mb_OK+mb_IconStop);                 Exit;
                     end;
                    //workBook:= ExcelApp.workBooks.Open(ExtractFileDir(Application.ExeName)+'excel.xls');
                    WorkBook:=ExcelApp.workbooks.Add;
                    ExcelApp.Cells(1,1):='条数';
                    ExcelApp.Cells(1,2):='工号';                ExcelApp.Cells(1,3):='姓名';
                    ExcelApp.Cells(1,4):='人民币合计';
                    ExcelApp.Cells(1,5):='减除费用额';                ExcelApp.Cells(1,6):='应纳税所得税';
                    ExcelApp.Cells(1,7):='税率';
                    ExcelApp.Cells(1,8):='速算扣除数';
                    ExcelApp.Cells(1,9):='扣缴所得税额';
                    j:=1;
                    //.
                    CommUtils.initialTable(table3,TBLNAME_TAX+'.dbf');
                    //.
                    table3.Open;
                    table3.First;
                    for i:=2 to recycle_length+1 do
                    begin                ExcelApp.Cells(i,1):=j;
                    ExcelApp.Cells(i,2):=table3.fieldbyname('T_id').Asstring;
                    ExcelApp.Cells(i,3):=table3.fieldbyname('T_name').Asstring;
                    ExcelApp.Cells(i,4):=table3.fieldbyname('T_total').Asfloat;
                    ExcelApp.Cells(i,5):=table3.fieldbyname('T_deduct').Asfloat;                ExcelApp.Cells(i,6):=table3.fieldbyname('T_taxable').Asstring;
                    ExcelApp.Cells(i,7):=FloatToStr(table3.fieldbyname('T_taxrate').asFloat*100)+'%';
                    ExcelApp.Cells(i,8):=table3.fieldbyname('T_quick').Asfloat;
                    ExcelApp.Cells(i,9):=table3.fieldbyname('T_amountax').Asfloat;                j:=j+1;                table3.next;
                    progressbar1.position:=progressbar1.position+1;
                    progressbar1.refresh ;
                    end;
                    ExcelApp.Cells(recycle_length+2,1):='合计';
                    ExcelApp.Cells(recycle_length+2,6):=query4.Fields[1].Asfloat;
                    ExcelApp.Cells(recycle_length+2,9):=query4.Fields[2].Asfloat;                WorkBook.SaveAS(xlsFileName);                WorkBook.close;
                     ShowMessage('导入Excel成功!');
                    end
                   else
                   begin
                     with query4 do
                     begin
                     CommUtils.initialQuery(Query4,'select count(T_id),sum(T_taxable),sum(T_amountax) from tax'
                      +' where T_date = '+ #39+s_date+#39);
                     open;
                     recycle_length:=query4.Fields[0].AsInteger ;
                     end;                 with query5 do
                     begin
                     CommUtils.initialQuery(Query5,'select T_id,T_name,T_total,T_deduct,T_taxrate,T_quick, T_taxable,T_amountax from tax '
                      +'where T_date ='+ #39+s_date+#39+'order by T_id');
                     open;
                     end;                progressbar1.Max := recycle_length;
                    progressbar1.position:=0;
                    try
                     ExcelApp:= CreateOleObject( 'Excel.Application' );
                     WorkBook:=CreateOleobject('Excel.Sheet');
                    except
                     application.Messagebox('无法打开Xls文件,请确认已 经安装EXCEL.','',mb_OK+mb_IconStop);                 Exit;
                     end;
                    //workBook:= ExcelApp.workBooks.Open(ExtractFileDir(Application.ExeName)+'excel.xls');
                    WorkBook:=ExcelApp.workbooks.Add;
                    ExcelApp.Cells(1,1):='条数';
                    ExcelApp.Cells(1,2):='工号';                ExcelApp.Cells(1,3):='姓名';
                    ExcelApp.Cells(1,4):='人民币合计';
                    ExcelApp.Cells(1,5):='减除费用额';                ExcelApp.Cells(1,6):='应纳税所得税';
                    ExcelApp.Cells(1,7):='税率';
                    ExcelApp.Cells(1,8):='速算扣除数';
                    ExcelApp.Cells(1,9):='扣缴所得税额';                j:=1;
                    CommUtils.initialTable(table3,TBLNAME_TAX+'.dbf');
                    table3.Open;
                    table3.First;
                    for i:=2 to recycle_length+1 do
                    begin                ExcelApp.Cells(i,1):=j;
                    ExcelApp.Cells(i,2):=Query5.fieldbyname('T_id').Asstring;
                    ExcelApp.Cells(i,3):=Query5.fieldbyname('T_name').Asstring;
                    ExcelApp.Cells(i,4):=Query5.fieldbyname('T_total').Asfloat;
                    ExcelApp.Cells(i,5):=Query5.fieldbyname('T_deduct').Asfloat;                ExcelApp.Cells(i,6):=Query5.fieldbyname('T_taxable').Asstring;
                    ExcelApp.Cells(i,7):=FloatToStr(Query5.fieldbyname('T_taxrate').asFloat*100)+'%';
                    ExcelApp.Cells(i,8):=Query5.fieldbyname('T_quick').Asfloat;
                    ExcelApp.Cells(i,9):=Query5.fieldbyname('T_amountax').Asfloat;                j:=j+1;                query5.next;
                    progressbar1.position:=progressbar1.position+1;
                    progressbar1.refresh ;
                    end;
                    ExcelApp.Cells(recycle_length+2,1):='合计';
                    ExcelApp.Cells(recycle_length+2,6):=query4.Fields[1].Asfloat;
                    ExcelApp.Cells(recycle_length+2,9):=query4.Fields[2].Asfloat;                WorkBook.SaveAS(xlsFileName);                WorkBook.close;
                     ShowMessage('导入Excel成功!');               end;           end;end;