您的位置:首页 > 其它

Ehlib 的 DBGridEh 控件导出到Excel的三种封装过程/函数

2013-09-10 23:23 519 查看
必须uses DBGridEhImpExp,  EhlibADO, DBGridEh

第一种:

procedure TForm2.dbgridehtoexp(lsdbgrideh: tdbgrideh; Title: string); //lsdbgrideh传入dbgrideh变量;Title保存标题

var

  ExpClass: TDBGridEhExportClass;

  Ext: string;

  sd1: tsavedialog;

begin

  try

    sd1 := tsavedialog.Create(nil);

    sd1.Filter := '*.xls|*.xls|*.csv|*.csv|*.htm|*.htm|*.rtf|*.rtf|*.txt|*.txt';

    sd1.FileName := Title;

    if sd1.Execute then

      begin

        case sd1.FilterIndex of

          1:

            begin

              ExpClass := TDBGridEhExportAsText;

              Ext := 'xls';

            end;

          2:

            begin

              ExpClass := TDBGridEhExportAsCSV;

              Ext := 'csv';

            end;

          3:

            begin

              ExpClass := TDBGridEhExportAsHTML;

              Ext := 'htm';

            end;

          4:

            begin

              ExpClass := TDBGridEhExportAsRTF;

              Ext := 'rtf';

            end;

          5:

            begin

              ExpClass := TDBGridEhExportAsXLS;

              Ext := 'txt';

            end;

        else

          ExpClass := nil;

          Ext := '';

        end;

        if ExpClass <> nil then

          begin

            if UpperCase(Copy(sd1.FileName, Length(sd1.FileName) - 2, 3)) <> UpperCase(Ext) then

              sd1.FileName := sd1.FileName + '.' + Ext;

            if FileExists(sd1.FileName) then

              begin

                if application.MessageBox('文件名已存在,是否覆盖', '提示', MB_ICONASTERISK or MB_OKCANCEL) <> idok then

                  begin

                    exit;

                  end;

              end;

            Screen.Cursor := crHourGlass;

            SaveDBGridEhToExportFile(ExpClass, lsDBGridEh, sd1.FileName, true);

            Screen.Cursor := crDefault;

          end;

      end;

  finally

    sd1.Free;

  end;

end;

第二种:

procedure TForm2.GridSaveAS(grid: TDBGridEh);

var

  ExpClass: TDBGridEhExportClass;

  Ext: string;

  SaveDlg: TSaveDialog;

  ExportAll: Boolean;

begin

  ExportAll := True; //缺省情况下导出所有数据

  SaveDlg := TSaveDialog.Create(Application);

  SaveDlg.Filter := 'Excel表格(*.XLS)|*.XLS|HTML文档(*.HTM)|*.HTM|RTF格式(*.RTF)|*.RTF|纯文本文件(*.TXT)|*.TXT|逗号分隔文本格式(*.CSV)|*.CSV';

  SaveDlg.FileName := '未命名';

  SaveDlg.Options := [ofOverwritePrompt, ofHideReadOnly, ofEnableSizing];

  if SaveDlg.Execute then

    begin

      case SaveDlg.FilterIndex of

        1:

          begin

            ExpClass := TDBGridEhExportAsXLS;

            Ext := 'xls';

          end;

        2:

          begin

            ExpClass := TDBGridEhExportAsHTML;

            Ext := 'htm';

          end;

        3:

          begin

            ExpClass := TDBGridEhExportAsRTF;

            Ext := 'rtf';

          end;

        4:

          begin

            ExpClass := TDBGridEhExportAsText;

            Ext := 'txt';

          end;

        5:

          begin

            ExpClass := TDBGridEhExportAsCSV;

            Ext := 'csv';

          end;

      else

        ExpClass := nil;

        Ext := '';

      end;

      if ExpClass <> nil then

        begin

          if UpperCase(Copy(SaveDlg.FileName, Length(SaveDlg.FileName) - 2, 3)) <>

          UpperCase(Ext) then

            SaveDlg.FileName := SaveDlg.FileName + '.' + Ext;

                  //如果grid中有选择的区域,则只导出所选择的区域

          if grid.Selection.SelectionType <> gstNon then ExportAll := False;

          try

            SaveDBGridEhToExportFile(ExpClass, grid, SaveDlg.FileName, ExportAll);

          except

            on E: Exception do

              begin

                MessageBox(0, LPCTSTR('保存文件发生异常,请检查是否有重名文件并且该文件没有被打开!'), '注意', MB_OK or MB_ICONWARNING);

                Exit;

              end;

          end;

        end;

    end;

end;

第三种:

function  DBGridEhToExportFile(dbgrideh:TDBGridEh;filename:string='导出的文件'):boolean ;

var ExpClass:TDBGridEhExportClass;

    Ext:String;

    sd1:tsavedialog;

begin

result:=True ;

    sd1:=tsavedialog.Create(nil);

     sd1.Filter:='Excel 文件(*.xls)|*.xls|分隔符格式(*.csv)|*.csv|Html文件(*.htm)|*.htm|WORD 文件(*.rtf)|*.rtf|文本文件(*.txt)|*.txt';

     sd1.FileName:=filename;

  if (dbgrideh is TDBGridEh) then

    if sd1.Execute then

    begin

      case sd1.FilterIndex of

        1: begin ExpClass := TDBGridEhExportAsText; Ext := 'xls'; end;

        2: begin ExpClass := TDBGridEhExportAsCSV; Ext := 'csv'; end;

        3: begin ExpClass := TDBGridEhExportAsHTML; Ext := 'htm'; end;

        4: begin ExpClass := TDBGridEhExportAsRTF; Ext := 'rtf'; end;

        5: begin ExpClass := TDBGridEhExportAsXLS; Ext := 'txt'; end;

      else

        ExpClass := nil; Ext := '';

      end;

      if ExpClass <> nil then

      begin

        if UpperCase(Copy(sd1.FileName,Length(sd1.FileName)-2,3)) <>

           UpperCase(Ext) then

          sd1.FileName := sd1.FileName + '.' + Ext;

     if FileExists( sd1.FileName) then

       begin

        if application.MessageBox('文件已存在,替换?','提示',mb_yesno+mb_defbutton1+mb_iconquestion+mb_systemmodal)=idyes then

          begin

           if   DeleteFile( sd1.FileName)=false then

            begin

               showmessage(filename+'文件正在使用,无法替换.'+chr(13)+chr(10)+'请关闭文件:'+sd1.FileName+'.在重新导入。');

           result:=false;

               exit;

            end;

        end;

       end;

        SaveDBGridEhToExportFile(ExpClass,TDBGridEh(dbgrideh),  sd1.FileName,true);  //改为false 只导出选择行

      end;

    end

    else

    begin

      result:=false;

    end;

  sd1.Free ;

end;
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: