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

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

在他人的DBGridEh导出Excel的基础上进行改进,增加功能如下: 1、支持多个DBGridEH同时导出Excel的不同Sheet页 2、进度条与数据进度保持一致 3、增加了进度百分比显示 //调用方法: procedure TForm1.Button1Click(Sender: TObject); var DbOut: TDBGridEhToExcel; i: integer; begin try DbOut := TDBGridEhToExcel.Create(Self); for i := 0 to 9 do //初始化数组 begin DbOut.DBGridEhRecAry[i].TempDBGridEh := nil; DbOut.DBGridEhRecAry[i].TitleName := ''; DbOut.DBGridEhRecAry[i].SheetTabName := ''; end; //有多少个DBGridEh的数据要导出,此处表示两个 DbOut.DBGridEhRecLength := 2; //统计结果一 DbOut.DBGridEhRecAry[0].TempDBGridEh := dbgSpotCheckCount; DbOut.DBGridEhRecAry[0].TitleName := '统计结果一'; DbOut.DBGridEhRecAry[0].SheetTabName := '统计结果一'; //统计结果二 DbOut.DBGridEhRecAry[1].TempDBGridEh := dbgValuationCount; DbOut.DBGridEhRecAry[1].TitleName := '统计结果二'; DbOut.DBGridEhRecAry[1].SheetTabName := '统计结果二'; DbOut.TitleName := '统计结果'; DbOut.ShowProgress := True; DbOut.ShowOpenExcel := True; DbOut.ExportToExcel; finally FreeAndNil(DbOut); end; end; 还可以改进的地方,比如: 1、标题栏占用几行,字体,字体颜色,字体大小,背景颜色可以封装提供设置方法; 2、字段标题字体,字体颜色,字体大小; 3、表格样式设置; 就是动态数据不会封装到类里面,如果有高人封装得更好一些,请发一份我;
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值