答出来分全给你,最好要有实例!

解决方案 »

  1.   

    把dbgrid改成昆腾cxGrid.就OK了,它提供了方法。
      

  2.   

    用Table或者Query保存成表格吧!
      

  3.   

    需要引用单元 ComObj,Excel2000,下面过程是将DBGrid中的数据拷贝到Excel中。
    procedure CopyDbDataToExcel(Target: TDbgrid);
    var
    iCount, jCount: Integer;
    XLApp: Variant;
    Sheet: Variant;
    begin
    Screen.Cursor := crHourGlass;
    if not VarIsEmpty(XLApp) then
    begin
    XLApp.DisplayAlerts := False;
    XLApp.Quit;
    VarClear(XLApp);
    end;
    //通过ole创建Excel对象
    try
    XLApp := CreateOleObject('Excel.Application');
    except
    Screen.Cursor := crDefault;
    Exit;
    end;
    XLApp.WorkBooks.Add[XLWBatWorksheet];
    XLApp.WorkBooks[1].WorkSheets[1].Name := '测试工作薄';
    Sheet := XLApp.Workbooks[1].WorkSheets['测试工作薄'];
    if not Target.DataSource.DataSet.Active then
    begin
    Screen.Cursor := crDefault;
    Exit;
    end;
    Target.DataSource.DataSet.first; for iCount := 0 to Target.Columns.Count - 1 do
    begin
    Sheet.cells[1, iCount + 1] := Target.Columns.Items[iCount].Title.Caption;
    end;
    jCount := 1;
    while not Target.DataSource.DataSet.Eof do
    begin
    for iCount := 0 to Target.Columns.Count - 1 do
    begin
    Sheet.cells[jCount + 1, iCount + 1] := Target.Columns.Items[iCount].Field.AsString;
    end;
    Inc(jCount);
    Target.DataSource.DataSet.Next;
    end;
    XlApp.Visible := True;
    Screen.Cursor := crDefault;
    end;
      

  4.   

    最近刚刚做过,测试过是ok的^_^
    procedure TMain.SaveToExcelFile(DbgridName: TDbGrid);
    var
     XLApp: Variant;
     Sheet: Variant;
     I, J: Integer;
     SaveDialog:TSaveDialog;
     pBookMark: TBookMark;
     StrSaveFile:string;
    begin
        if dbgridname.DataSource.DataSet.IsEmpty then
        begin
           messagebox(application.Handle,'没有任何数据,不能进行保存','警告',mb_ok);
           abort;
        end;
        SaveDialog:=TSaveDialog.Create(Nil);
        SaveDialog.Filter := '*.xls';
        SaveDialog.Execute;
        StrSaveFile:=SaveDialog.FileName;
        if length(StrSaveFile)=0 then exit;
        try
          screen.Cursor:=crHourGlass;
                begin
                   try
                     XLApp := CreateOleObject('Excel.Application');
                     XLApp.WorkBooks.Add(-4167); //??????????????
                     XLApp.WorkBooks[1].WorkSheets[1].Name := '导出数据';
                     Sheet := XLApp.WorkBooks[1].WorkSheets['导出数据'];
                     J := 1;
                   except
                       MessageBox(GetActiveWindow,'无法调用Mircorsoft Excel! '+chr(13)+chr(10)+
                                '请检查是否安装了Mircorsoft Excel。','提示',MB_OK+MB_ICONINFORMATION);
                       Exit;
                   end;
                   with Dbgridname.DataSource.DataSet do
                   begin
                     pBookMark := GetBook;
                     DisableControls;
                     for I:=0 to dbgridname.Columns.Count-1 do
                     begin
                        if dbgridname.Columns[I].Visible=False then
                           Continue;
                        Sheet.Cells[J,I+1] := dbgridname.Columns[I].Title.Caption;
                     end;
                     Inc(J);
                     First;
                     while not Eof do  begin
                           for I:=0 to dbgridname.Columns.Count-1 do begin
                               if dbgridname.Columns[I].Visible=False then
                                  Continue;
                               Sheet.Cells[J,I+1] := trim(dbgridname.DataSource.DataSet.Fieldbyname(dbgridname.Columns[i].FieldName).asstring);
                           end;
                           Inc(J);
                           Next;
                     end;
                     GotoBook(pBookMark);
                     FreeBook(pBookMark);
                     EnableControls;
                   end;
                   XLApp.activeworkbook.saveas(StrSaveFile);
                   Application.ProcessMessages;
                   XLApp.Application.Quit;
                   showmessage('导出成功!');
               end;
        Finally
        SaveDialog.Free;
        screen.Cursor:=crDefault;
       end;
    end;
      

  5.   

    你即然可以有DBGrid显示内容,那你一定是从表中得到的了,那我想你打印报表的时候也就用这个表吧
      

  6.   

    要么用代码一个项一项赋值到EXCELL表中,要么用BECHMOVE直接导,还是直接导方便,EXCELL表中不支持索引,直接导过去不存在索引问题