zoukankan      html  css  js  c++  java
  • DBGridEh导出功能详解

    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.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;
    好的代码像粥一样,都是用时间熬出来的
  • 相关阅读:
    GDAL创建JPG或PNG格式图像
    GDAL从二进制数据流中构造数据集
    curl使用小记(三)——获取远端数据到内存缓冲区
    C++产生N以内的随机整数
    搬迁声明
    C++通过文件指针获取文件大小
    大地经纬度坐标系与Web墨卡托坐标系的转换
    计算机体系结构基础
    网站设置为禁止粘贴、复制和另存
    区块链交易隐私如何保证?华为零知识证明技术实战解析
  • 原文地址:https://www.cnblogs.com/jijm123/p/13941555.html
Copyright © 2011-2022 走看看