zoukankan      html  css  js  c++  java
  • DbgridEh数据导出到Excel的方法(Delphi)

    本文内容严重参考了网上其他牛人的代码,并做了一些修改,使得参数更加简单,结构更清晰,所以就厚着脸皮说是原创。

    uses DBGridEhImpExp;

    procedure TFrm_func.DbGridEhToExcel(ADgEh: TDBGridEh);
    var
      ExpClass: TDBGridEhExportclass;
      Ext: string;
      FSaveDialog: TSaveDialog;
    begin
      try
        if ADgEh.DataSource.DataSet.IsEmpty then
        begin
          Application.MessageBox(PChar('没有可导出的数据'), PChar('提示'), MB_OK +
            MB_ICONINFORMATION);
          exit;
        end;
        FSaveDialog := TSaveDialog.Create(Self);
        FSaveDialog.Filter :=
          'Excel 文档 (*.xls)|*.XLS|Text files (*.txt)|*.TXT|Comma separated values (*.csv)|*.CSV|HTML file (*.htm)|*.HTM|Word 文档 (*.rtf)|*.RTF';
        if FSaveDialog.Execute and (trim(FSaveDialog.FileName) <> '') then
        begin
          case FSaveDialog.FilterIndex of
            1:
              begin
                ExpClass := TDBGridEhExportAsXLS;
                Ext := 'xls';
              end;
            2:
              begin
                ExpClass := TDBGridEhExportAsText;
                Ext := 'txt';
              end;
            3:
              begin
                ExpClass := TDBGridEhExportAsCSV;
                Ext := 'csv';
              end;
            4:
              begin
                ExpClass := TDBGridEhExportAsHTML;
                Ext := 'htm';
              end;
            5:
              begin
                ExpClass := TDBGridEhExportAsRTF;
                Ext := 'rtf';
              end;
          end;
          if ExpClass <> nil then
          begin
            if UpperCase(Copy(FSaveDialog.FileName, Length(FSaveDialog.FileName) -
              2, 3)) <> UpperCase(Ext) then
              FSaveDialog.FileName := FSaveDialog.FileName + '.' + Ext;
            if FileExists(FSaveDialog.FileName) then
            begin
              if application.MessageBox('文件名已存在,是否覆盖   ', '提示',
                MB_ICONASTERISK or MB_OKCANCEL) <> idok then
                exit;
            end;
            Screen.Cursor := crHourGlass;
            SaveDBGridEhToExportFile(ExpClass, ADgEh, FSaveDialog.FileName, true);
            Screen.Cursor := crDefault;
            MessageBox(Handle, '导出成功  ', '提示', MB_OK +
              MB_ICONINFORMATION);
          end;
        end;
        FSaveDialog.Destroy;
      except
        on e: exception do
        begin
          Application.MessageBox(PChar(e.message), '错误', MB_OK + MB_ICONSTOP);
        end;
      end;
    end;

    好的代码像粥一样,都是用时间熬出来的
  • 相关阅读:
    Scrum为什么不喜欢“来自客户的频繁变更”?
    [转]SQL Server计算列
    宽容,是创新的土壤
    【转载】《2010年年度总结》
    远程维护需要“千里眼”
    TOP语句放到表值函数外,效率异常低下
    “设计应对变化”实例讲解一个数据同步系统
    “批量少次”还是“少量多次”邮件通信系统效率浅谈
    NYOJ117 求逆序数
    NYOJ92 图像有用区域
  • 原文地址:https://www.cnblogs.com/jijm123/p/13452075.html
Copyright © 2011-2022 走看看