dbgrideh导出全部记录和导出选中记录【自己总结全】

dbgrideh导出全部记录和导出选中记录:(参考链接:http://blog.csdn.net/lailai186/article/details/38588483)

DBGridEh导出功能详解(SaveDBGridEhToExportFile说明)
经常有用户要求数据导出,对此,我们一直用最原始的办法,打开查询,读取每个字段的数据,逐条的的写入文件。

后来发现,其实DBGridEh控件提供了一个过程:SaveDBGridEhToExportFile,提供了很好的导出功能,可以方便的将查询出的数据导出为txt,csv,html等格式的文件。

说明如下:
procedure SaveDBGridEhToExportFile( ExportClass: TDBGridEhExportClass; DBGridEh: TCustomDBGridEh; const FileName: String; IsSaveAll: Boolean);
其中:
ExportClass--导出文件类型,可以为以下值:TDBGridEhExportAsText, TDBGridEhExportAsCsv, TDBGridEhExportAsHTML, TDBGridEhExportAsRTF, TDBGridEhExportAsVCLDBIF,TDBGridEhExportAsXLS.
DBGridEh--DBGridEh控件
FileName--要导出的文件路径名称
IsSaveAll--是否导出全部数据:Y-导出全部数据;N:导出选择部分数据。

注意:
使用时必须添加新的引用单元:DBGridEhImpExp(以下两个引用单元也必须存在:DBGridEh,  EhLibBDE)。

示例:
SaveDBGridEhToExportFile(pExpClass,dbgMain,pExpFile,True);    //导出全部数据。
SaveDBGridEhToExportFile(pExpClass,TDBGridEh(ActiveControl),pExpFile,False);  //导出选择数据

 

+++
  附使用示例:
  ---
  环境:Delphi Version6.0[Build 6.163]+EhlibV3.4

  准备介绍如下:
  1,在窗体uses中,添加新的引用单元:DBGridEhImpExp(以下两个引用单元也必须存在:DBGridEh,  EhLibBDE)。
  2,在窗体中添加一个DBGridEh控件,并设置名称为:dbgMain(可以随意命名的)。
  3,设置DBGridEh控件可以多重选择:在属性页中设置options-dgMultiSelect=true。为的是可以选择范围,导出部分数据。
  4,为DBGridEh控件指定DataSource数据源。
  5,添加TSaveDialog控件SaveDialog1,设定文件类型列表,和默认文件类型,如下(也可以直接在属性页中设置):
  SaveDialog1.Filter:='Text files (*.txt)|*.TXT|Comma separated values (*.csv)|*.CSV|HTML file (*.htm)|*.HTM|Rich Text Format (*.rtf)|*.RTF|Microsoft Excel Workbook (*.xls)|*.XLS';   
  SaveDialog1.FilterIndex:=0;
  6,添加两上按钮,分别为全部导出和部分导出,分别添加以下代码到按钮的单击事件中。

 

自己做的实例:

1,类单元:

unit UExportExcel;

interface
uses
  Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics,
  Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.ComCtrls, Data.DB, Data.Win.ADODB,
  Vcl.ExtCtrls, Vcl.DBCtrls, Vcl.Grids, Vcl.DBGrids, Clipbrd, Vcl.Menus,
  Vcl.StdCtrls, DBGridEhGrouping, ToolCtrlsEh, DBGridEhToolCtrls, DynVarsEh,
  EhLibVCL, GridsEh, DBAxisGridsEh, DBGridEh,EhLibADO,DBGridEhImpExp;
/// <summary>
/// 导出全部记录数据到excel,思路是用dbgrideh的方法
/// </summary>
type TExportExcel =class
  public
  class procedure exportexcelall(var ADbgrdh:TDBGridEh);
  class procedure exportexcelselected(var ADbgrdh:TDBGridEh);
end;


implementation
class procedure TExportExcel.exportexcelall(var ADbgrdh:TDBGridEh);
var
SaveDialog:TSaveDialog;
begin
try
try
//设置报错对话框的属性
SaveDialog:=TSaveDialog.Create(nil);
SaveDialog.Filter:='EXCEL电子表格|*.XLS';
if SaveDialog.Execute then
  begin
     //设置文件名后缀
     SaveDialog.FileName:=SaveDialog.FileName+'.xls';
     //判断文件是否已经存在
     if FileExists(SaveDialog.FileName) then
        begin
          if application.MessageBox('文件名已存在,是否覆盖   ', '提示', MB_ICONASTERISK or MB_OKCANCEL)<>idok then
            exit;
        end;
     Screen.Cursor := crHourGlass; //屏幕鼠标沙漏忙碌状态
     //导出全部记录 最后设true;
     SaveDBGridEhToExportFile(TDBGridEhExportAsXls,ADbgrdh,SaveDialog.FileName,true);
     Screen.Cursor := crDefault; //鼠标恢复默认状态
     //提示导出成功
     MessageBox(0, '导出成功  ', '提示', MB_OK +MB_ICONINFORMATION);
     end;
except
    //异常报错
    on e: exception do
    begin
      Application.MessageBox(PChar(e.message), '错误', MB_OK + MB_ICONSTOP);
    end;
end;
finally
  SaveDialog.Free;
end;
end;


class procedure TExportExcel.exportexcelselected(var ADbgrdh: TDBGridEh);
var
SaveDialog:TSaveDialog;
begin
try
try
//设置报错对话框的属性
SaveDialog:=TSaveDialog.Create(nil);
SaveDialog.Filter:='EXCEL电子表格|*.XLS';
if SaveDialog.Execute then
  begin
     //设置文件名后缀
     SaveDialog.FileName:=SaveDialog.FileName+'.xls';
     //判断文件是否已经存在
     if FileExists(SaveDialog.FileName) then
        begin
          if application.MessageBox('文件名已存在,是否覆盖   ', '提示', MB_ICONASTERISK or MB_OKCANCEL)<>idok then
            exit;
        end;
     Screen.Cursor := crHourGlass; //屏幕鼠标沙漏忙碌状态
     //导出选中记录记录 ,最后设false
     SaveDBGridEhToExportFile(TDBGridEhExportAsXls,ADbgrdh,SaveDialog.FileName,false);
     Screen.Cursor := crDefault; //鼠标恢复默认状态
     //提示导出成功
     MessageBox(0, '导出成功  ', '提示', MB_OK +MB_ICONINFORMATION);
     end;
except
    //异常报错
    on e: exception do
    begin
      Application.MessageBox(PChar(e.message), '错误', MB_OK + MB_ICONSTOP);
    end;
end;
finally
  SaveDialog.Free;
end;
end;

end.

 

2,引用使用:

procedure TForm3.excel1Click(Sender: TObject);
begin
//导出全部记录到excel
TExportExcel.exportexcelall(dbgrdh1);
end;



procedure TForm3.excel2Click(Sender: TObject);
begin
//导出选中记录到excel
TExportExcel.exportexcelselected(dbgrdh1);
end;

 

附加参考其他网友实例:

//全部导出过程
procedure TForm1.btnAllExportClick(Sender: TObject);
var
  pExpClass:TDBGridEhExportClass;      //导出文件类型
  pExt:string ;                        //导出文件扩展名
  pExpFile:string;                     //导出文件路径及文件名称
  pExpFileExt:string;                  //SaveDialog1返回的文件名的扩展名
begin
    //清空SaveDialog1默认文件名
    SaveDialog1.FileName := '';
    if SaveDialog1.Execute then begin    //如果SaveDialog1正确执行
        case SaveDialog1.FilterIndex of     //根据FilterIndex设置导出文件类型和扩展名
            1: begin pExpClass := TDBGridEhExportAsText; pExt := 'txt'; end;
            2: begin pExpClass := TDBGridEhExportAsCSV; pExt := 'csv'; end;
            3: begin pExpClass := TDBGridEhExportAsHTML; pExt := 'htm'; end;
            4: begin pExpClass := TDBGridEhExportAsRTF; pExt := 'rtf'; end;
            5: begin pExpClass := TDBGridEhExportAsXLS; pExt := 'xls'; end;
        else
            pExpClass := nil; pExt := '';
        end;
        if pExpClass <> nil then begin        //如果导出文件类型已经被正确设置
            pExpFile:= trim(SaveDialog1.FileName);
            pExpFileExt:= Copy(pExpFile,Length(pExpFile)-2,3);
            //判断返回的文件名称是否已经包含正确的扩展名,如果没有则添加正确的扩展名
            if UpperCase(pExpFileExt) <> UpperCase(pExt) then
               pExpFile := pExpFile + '.' + pExt;
            SaveDBGridEhToExportFile(pExpClass,DBGridEh1,pExpFile,True);    //按现有设置导出全部数据。
            //X_pMsg:='The data have saved as '+pExpFile;
            //stbForm.Panels[0].Text:=X_pMsg;
            MessageDlg('The data have saved as '+pExpFile,mtInformation,[mbOk],0);
        end;
    end;
end;
//部分导出过程
procedure TForm1.btnAllExportClick(Sender: TObject);
var
  pExpClass:TDBGridEhExportClass;      //导出文件类型
  pExt:string ;                        //导出文件扩展名
  pExpFile:string;                     //导出文件路径及文件名称
  pExpFileExt:string;                  //SaveDialog1返回的文件名的扩展名
begin
    //清空SaveDialog1默认文件名
    SaveDialog1.FileName := '';
    if SaveDialog1.Execute then begin    //如果SaveDialog1正确执行
        case SaveDialog1.FilterIndex of     //根据FilterIndex设置导出文件类型和扩展名
            1: begin pExpClass := TDBGridEhExportAsText; pExt := 'txt'; end;
            2: begin pExpClass := TDBGridEhExportAsCSV; pExt := 'csv'; end;
            3: begin pExpClass := TDBGridEhExportAsHTML; pExt := 'htm'; end;
            4: begin pExpClass := TDBGridEhExportAsRTF; pExt := 'rtf'; end;
            5: begin pExpClass := TDBGridEhExportAsXLS; pExt := 'xls'; end;
        else
            pExpClass := nil; pExt := '';
        end;
        if pExpClass <> nil then begin        //如果导出文件类型已经被正确设置
            pExpFile:= trim(SaveDialog1.FileName);
            pExpFileExt:= Copy(pExpFile,Length(pExpFile)-2,3);
            //判断返回的文件名称是否已经包含正确的扩展名,如果没有则添加正确的扩展名
            if UpperCase(pExpFileExt) <> UpperCase(pExt) then
               pExpFile := pExpFile + '.' + pExt;
            SaveDBGridEhToExportFile(pExpClass,DBGridEh1,pExpFile,False);    //按现有设置导出全部数据。
            //X_pMsg:='The data have saved as '+pExpFile;
            //stbForm.Panels[0].Text:=X_pMsg;
            MessageDlg('The data have saved as '+pExpFile,mtInformation,[mbOk],0);
        end;
    end;
end;

 

posted @ 2017-06-22 10:37  delphi学习交流吧  阅读(939)  评论(0编辑  收藏  举报