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

来源:互联网 发布:有20个usb端口的电脑 编辑:程序博客网 时间:2024/05/22 15:22

必须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;


原创粉丝点击