Allen 2009-06-09 12:42:14 10333 1 0 0 0

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

procedure TForm10.prExpData(pMode:Byte);
Var
  pFPath:String;
  pFName:String;   //Exp Name of prefix
  pFObject:string;
  pMyFile:TextFile;
  pStr:string;
  i:integer;
begin

        pFObject:=^c:Exp_Sample.csv^;

        AssignFile(pMyFile,pFObject);
        ReWrite(pMyFile);

        with DM.QR_ENJBTR_250 do begin
            CLOSE;
            open;

            //写入标题
            for i:=0 to DM.QR_ENJBTR_250.FieldCount-1 do begin
                pStr:=pStr+DM.QR_ENJBTR_250.FieldDefs.Items[i].Name+^,^;
            end;
            WriteLn(pMyFile,pStr);

            //写入内容
            while not EOF do begin
                pStr:=^^;
                For i:=0 to FieldCount-1 do begin
                    pstr:=pStr+Fields.Fields[i].AsString+^,^;
                end;
                //copy(pStr,1,Length(pStr)-1);
                WriteLn(pMyFile,pStr);
                Next;
            end;
        end;  //With end;
        xMsg:=^--->成功导出PurPart明细表:^+pFObject; cpWriteLog(x_pLogFile,xMsg,1);  // V2033 Add
        CloseFile(pMyFile);
end;

  后来发现,其实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,添加两上按钮,分别为全部导出和部分导出,分别添加以下代码到按钮的单击事件中。

//全部导出过程
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.btnPartExportClick(Sender: TObject);
var
  pExpClass:TDBGridEhExportClass;      //导出文件类型
  pExt:string ;                        //导出文件扩展名
  pExpFile:string;                     //导出文件路径及文件名称
begin
    SaveDialog1.FileName := ^^;
    if (ActiveControl is TDBGridEh) then

        if SaveDialog1.Execute then begin
            case SaveDialog1.FilterIndex of
                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);
                if UpperCase(Copy(pExpFile,Length(pExpFile)-2,3)) <> UpperCase(pExt) then
                   pExpFile := pExpFile + ^.^ + pExt;

                SaveDBGridEhToExportFile(pExpClass,TDBGridEh(ActiveControl),pExpFile,False);
                X_pMsg:=^The data have saved as ^+pExpFile;
                stbForm.Panels[0].Text:=X_pMsg;
                MessageDlg(x_pMsg,mtInformation,[mbOk],0);
            end;
        end;

end;
 

 


Tag: Delphi技巧 TTTBLOG
我也要发一个   ·   返回首页   ·   返回[Delphi]   ·   前一个   ·   下一个
评论
Allen#1Allen 2009-06-09 10:58:13(N) 链接地址
| 5 | chizs | 2009-06-09 10:58:13 | [email protected] | http://localhost |
-----
[B]顶[/B]
顶部     1/1 
欢迎评论
未登录,
请先 [ 注册 ] or [ 登录 ]
(一分钟即可完成注册!)
返回首页     ·   返回[Delphi]   ·   返回顶部