//Dxdbgrid,则直接用SaveToexcel即可
//使用 ExcelWithOdbc 控件
function TDataModule1.GetDataToFile(DsData: TObject): Boolean; //用于将数据导入文件中
var
   DataSet: TCustomADODataSet;
   FileName: string;
   FileType: string;
begin
   if not ((DsData is TCustomADODataSet) or (DsData is TDBGrid) or (DsData is TdxDBGrid)) then
   begin
      Application.MessageBox('警告:目前不支持此数据集!', '警告', MB_OK + MB_ICONERROR);
      exit;
   end;

if (DsData is TCustomADODataSet) then
      DataSet := DsData as TCustomADODataSet
            //  DBGrid
   else if (DsData is TDBGrid) then
      DataSet := TDBGrid(DsData).DataSource.DataSet as TCustomADODataSet
            // dxDBGrid
   else if (DsData is TdxDBGrid) then
      DataSet := TdxDBGrid(DsData).DataSource.DataSet as TCustomADODataSet;

if DataSet.isEmpty then
   begin
      Application.MessageBox('警告:数据集中没有数据!', '警告', MB_OK + MB_ICONWARNING);
      exit;
   end;

if (DsData is TdxDBGrid) then
   begin //如果是当前所传入的参数是Dxdbgrid,则直接用SaveToexcel即可!
      if Application.MessageBox('如果保存为Excle文件请选择Yes,保存OpenOffice格式请选择No !', '提示', mb_yesNO + mb_defbutton1 + mb_iconinformation) = idyes then
      begin
         QCMMainFrm.GetExcelName.Options := [ofAllowMultiSelect, ofFileMustExist];
         QCMMainFrm.GetExcelName.Filter := 'Excel files (*.xls)|*.XLS';
         FileType := 'XLS';
      end
      else
      begin
         QCMMainFrm.GetExcelName.Options := [ofAllowMultiSelect, ofFileMustExist];
         QCMMainFrm.GetExcelName.Filter := 'Excel files (*.csv)|*.CSV';
         FileType := 'CSV';
      end;

if QCMMainFrm.GetExcelName.Execute then
      begin
         try
            FileName := QCMMainFrm.GetExcelName.FileName;
            if pos('.', FileName) <= 0 then
               FileName := FileName + '.' + FileType;

if FileExists(FileName) = true then
            begin
               if Application.MessageBox(PChar('文件' + FileName + '已经存在,是否覆盖?'), '提示', MB_YESNO + MB_ICONWARNING) = idNo then
                  exit;

try
                  DeleteFile(pchar(FileName));
               except
                  Application.MessageBox('请重新指定文件名!', '出现错误', MB_ICONWARNING + MB_OK);
               end;
            end;

if FileType = 'XLS' then
               TdxDBGrid(DsData).SaveToXLS(FileName, true)
            else
               TdxDBGrid(DsData).SaveToText(FileName, true, ',', '', ''); //保存成以逗号为分隔符号的文本文件。
            Result := true;
            application.MessageBox('提示:数据保存成功!', '提示', mb_ok + mb_iconinformation);
            if (Application.MessageBox('文件保存成功,是否打开?', '提示', MB_ICONINFORMATION + MB_YESNO) = IDYES) then
               ShellExecute(GetDesktopWindow, 'open', PChar(FileName), nil, PChar(ExtractFileDir(FileName)), SW_SHOWMAXIMIZED);
         except
            Result := false;
            application.MessageBox('警告:数据保存失败,请重试!', '警告', mb_ok + mb_iconerror);
            exit;
         end;
      end;
   end
   else
   begin
      QCMMainFrm.ExcelWithOdbc.DataItems.Clear;
      QCMMainFrm.ExcelWithOdbc.DataItems.Add;
      if (DsData is TCustomADODataSet) then
         QCMMainFrm.ExcelWithOdbc.DataItems.Items[0].DataSet := DsData as TCustomADODataSet
      else if (DsData is TDBGrid) then
         QCMMainFrm.ExcelWithOdbc.DataItems.Items[0].DBGrid := DsData as TDBGrid
      else if (DsData is TdxDBGrid) then
         QCMMainFrm.ExcelWithOdbc.DataItems.Items[0].DxDBGrid := DsData as TdxDBGrid;
      Result := False;
      try
         QCMMainFrm.ExcelWithOdbc.AutoGetFileName := true;
         QCMMainFrm.ExcelWithOdbc.AutoOpen := true;
         QCMMainFrm.ExcelWithOdbc.ExcelFileName := '';
         QCMMainFrm.ExcelWithOdbc.Execute();
         Result := true;
      except
         Result := false;
         application.MessageBox('警告:数据保存失败,请重试!', '警告', mb_ok + mb_iconerror);
         exit;
      end;
   end;
end;

//cxgrid导出数据
Uses cxExportGrid4Link;
    if SaveDlg.Execute then
    begin
      if SaveDlg.FileName='' then
      begin
        Application.Messagebox(Pchar('请输入文件名!'),
                        Pchar('提示'),Mb_IconInforMation+MB_OK);
        exit;
      end;

if FileExists(SaveDlg.FileName) then
      begin
        if Application.Messagebox(Pchar('该目录下已存在这个文件,要替换吗?'),
                        Pchar('提示'),Mb_IconInforMation+MB_YESNO)=ID_NO then Exit;
        DeleteFile(SaveDlg.FileName);
      end;

ExportGrid4ToExcel(SaveDlg.FileName,
                        cxGrid1,
                        True,
                        True,
                        false);                 //字符串形式

Application.Messagebox(Pchar('成功汇出数据!' + char(13) + SaveDlg.FileName),
                  Pchar('提示'),Mb_IconInforMation+MB_OK);

end;

//StringList方法
procedure TfmMain.SaveDxGridToCSV(DxGrid: TDxDBGrid; ExcelFileName: string =
  '');
var
  i, j, SelectCount: integer;
  s, s1: string;
  theStringList: Tstringlist;
  FileName: string;
  OutFieldIndex: array of integer;
  Book1: Pointer;
begin
  if not DxGrid.DataSource.DataSet.Active then
    Exit;
  if ExcelFileName <> '' then
    SaveDialog1.FileName := ExcelFileName;
  if not SaveDialog1.Execute then
    Exit;
  FileName := SaveDialog1.FileName;
  if trim(FileName) = '' then
    Exit;
  if (length(FileName) < 4) or (UpperCase(Copy(FileName, length(FileName) - 3,
    4)) <> '.CSV') then
    FileName := FileName + '.csv';
  DxGrid.DataSource.DataSet.DisableControls;
  Book1 := DxGrid.DataSource.DataSet.GetBookmark;

fmSelectFields := TfmSelectFields.Create(Self);
  for i := 0 to DxGrid.ColumnCount - 1 do
  begin
    if DxGrid.Columns[i].Visible then
    begin
      with fmSelectFields.ListView1.Items.Add do
      begin
        Caption := DxGrid.Columns[i].Caption;
        SubItems.Add(inttostr(DxGrid.Columns[i].Field.Index));
        Checked := True;
      end;
    end;
  end;
  try
    if not (fmSelectFields.ShowModal = mrOK) then
      Exit;
    SelectCount := 0;
    for i := 0 to fmSelectFields.ListView1.Items.Count - 1 do
    begin
      if fmSelectFields.ListView1.Items[i].Checked then
        SelectCount := SelectCount + 1;
    end;

s := '';
    //添加字段名
    if (SelectCount = 0) or (SelectCount = fmSelectFields.ListView1.Items.Count)
      then
    begin
      SelectCount := fmSelectFields.ListView1.Items.Count;
      SetLength(OutFieldIndex, SelectCount);
      for i := 0 to SelectCount - 1 do
      begin
        s := s + '"' + StringReplace(fmSelectFields.ListView1.Items[i].Caption,
          '"', '""', [rfReplaceAll]) + '",';
        OutFieldIndex[i] :=
          StrToInt(fmSelectFields.ListView1.Items[i].SubItems[0]);
      end;
    end
    else
    begin
      SetLength(OutFieldIndex, SelectCount);
      j := 0;
      for i := 0 to fmSelectFields.ListView1.Items.Count - 1 do
      begin
        if fmSelectFields.ListView1.Items[i].Checked then
        begin
          s := s + '"' +
            StringReplace(fmSelectFields.ListView1.Items[i].Caption,
            '"', '""', [rfReplaceAll]) + '",';
          OutFieldIndex[j] :=
            StrToInt(fmSelectFields.ListView1.Items[i].SubItems[0]);
          inc(j);
        end;
      end;
    end;
    theStringList := TStringList.Create;
    Delete(s, length(s), 1);
    theStringList.Add(s);
    with DxGrid.DataSource.DataSet do
    begin
      First;
      while not Eof do
      begin
        s := '';
        for i := 0 to SelectCount - 1 do
        begin
          s1 := Fields[OutFieldIndex[i]].DisplayText;//AsString;
          if Fields[OutFieldIndex[i]].DataType = ftString then
            s1 := '''' + StringReplace(s1, '"', '""', [rfReplaceAll]);
          s := s + '"' + (s1) + '",';
        end;
        Next;
        System.Delete(s, length(s), 1);
        theStringList.add(s);
      end;
    end;
    theStringList.savetofile(FileName);
    theStringList.Clear;
    theStringList.Free;
    if (Application.MessageBox('文件成功保存,是否要现在打开文件?', '提示',
      MB_ICONQUESTION + MB_YESNO) = IDYES) then
      ShellExecute(GetDesktopWindow, 'open', PChar(FileName), nil,
        PChar(ExtractFileDir(FileName)), SW_SHOWMAXIMIZED);
  finally
    fmSelectFields.Free;
    fmSelectFields := nil;
    DxGrid.DataSource.DataSet.GotoBookmark(Book1);
    DxGrid.DataSource.DataSet.EnableControls;
  end;
end;

//EXCEL OLE对象
procedure adoquerytoexcel(Aadoquery:TCustomADODataSet;sheetname:string='');
var
  XLApp: Variant;
  i:integer;
  Sheet: Variant;
begin
  if MessageDlg('你的电脑上是否安装Excel?',mtConfirmation, [mbYes, mbNo], 0)=mrYes then
    begin
      if Aadoquery.IsEmpty then exit;
     //    if Aadoquery.RecordCount=0 then exit;
      try
        XLApp:= CreateOleObject('Excel.Application');
        XLApp.Visible := True;
        XLApp.Workbooks.Add(-4167);
        if sheetname='' then sheetname:='系统数据';
        XLApp.Workbooks[1].WorkSheets[1].Name :=sheetname;
        Sheet := XLApp.Workbooks[1].WorkSheets[1];

for i := 1 to Aadoquery.fieldcount do
        begin
          Sheet.Cells[1, i] :=Aadoquery.fields[i-1].FieldName;
        end;
        sheet.cells[2,1].copyfromrecordset(AAdoQuery.recordset);
      except
        NewDataToExcel(Aadoquery);
      end;
    end
  else
    begin
      MainForm.toopenoffice(Aadoquery);
    end;
end;

//逐条导出
procedure TfmFabricPlanning.SaveToFileClick(Sender: TObject);
var
  FileName,Str2 :String;
  Str :TStringList;
  I :integer;
begin
  if GetExcelName.Execute then
  begin
    FileName := GetExcelName.FileName;
    if uppercase(copy(FileName,length(FileName)-3,4)) <> '.CSV' then
      FileName := FileName + '.CSV';
    Str := TStringList.Create;
    //HEAD
    Str.Add('"缸号","头缸状态","复板OK","用途","序列","交期","缸要求量","排单号","品名","要求重量","要求数量","单位","可备布量","客户","纱批","纱支布种"');
    //record
    for I := 0 to lvwBatch.items.count - 1 do
    begin
      Str2 := '"'+ lvwBatch.Items[i].Caption + '"';
      Str2 := Str2+',"' + lvwBatch.Items[i].SubItems.Strings[0] +'"';
      Str2 := Str2+',"' + lvwBatch.Items[i].SubItems.Strings[1] +'"';
      Str2 := Str2+',"' + lvwBatch.Items[i].SubItems.Strings[2] +'"';
      Str2 := Str2+',"''' + lvwBatch.Items[i].SubItems.Strings[3] +'"';
      Str2 := Str2+',"' + lvwBatch.Items[i].SubItems.Strings[4] +'"';
      Str2 := Str2+',"' + lvwBatch.Items[i].SubItems.Strings[5] +'"';
      Str2 := Str2+',"' + lvwBatch.Items[i].SubItems.Strings[6] +'"';
      Str2 := Str2+',"' + lvwBatch.Items[i].SubItems.Strings[7] +'"';
      Str2 := Str2+',"' + lvwBatch.Items[i].SubItems.Strings[8] +'"';
      Str2 := Str2+',"' + lvwBatch.Items[i].SubItems.Strings[9] +'"';
      Str2 := Str2+',"' + lvwBatch.Items[i].SubItems.Strings[10] +'"';
      Str2 := Str2+',"' + lvwBatch.Items[i].SubItems.Strings[11] +'"';
      Str2 := Str2+',"' + StringReplace(lvwBatch.Items[i].SubItems.Strings[12],'"','""',[rfReplaceAll]) +'"';
      Str2 := Str2+',"' + StringReplace(lvwBatch.Items[i].SubItems.Strings[13],'"','""',[rfReplaceAll]) +'"';
      Str2 := Str2+',"' + StringReplace(lvwBatch.Items[i].SubItems.Strings[14],'"','""',[rfReplaceAll]) +'"';

Str.Add(Str2);
    end;
    Str.SaveToFile(FileName);
    if (Application.MessageBox('文件成功保存,是否要现在打开文件?', '提示',
      MB_ICONQUESTION + MB_YESNO) = IDYES) then
      ShellExecute(GetDesktopWindow, 'open', PChar(FileName), nil,
        PChar(ExtractFileDir(FileName)), SW_SHOWMAXIMIZED);
  end;
end;

//dbgrideh导出数据
uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, ExtCtrls, StdCtrls, Buttons, RzBckgnd, ADODB,
  dbgridehimpexp, DBGridEh, RzLabel;

type
  TfrmminiExport = class(TForm)
    RzBackground1: TRzBackground;
    cmbfmt: TComboBox;
    BitBtn1: TBitBtn;
    BitBtn2: TBitBtn;
    Bevel1: TBevel;
    SaveDialog1: TSaveDialog;
    labHits: TRzLabel;
    procedure BitBtn1Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  frmminiExport: TfrmminiExport;

//导出资料使用的变量
  qryExportname:string;
  qryExportDBGridEh:TDBGrideh;
  qryADOQ:tadoquery;

implementation

{$R *.dfm}

uses U_SfisPCDataModule, u_pub_func, u_qryPH;

procedure TfrmminiExport.BitBtn1Click(Sender: TObject);
var
  expclass:tdbgridehexportclass;
  filename:string;
begin
 // ShowMessage('Go...');
  //ShowMessage(frmsample.cmbgd.Text);
  //modalResult := mrnone;
  if cmbfmt.Text='' then
  begin
    application.MessageBox('请选择汇出资料的格式,谢谢!','提示',mb_iconinformation+mb_ok);
    exit;
  end;

//ShowMessage('1');
  if qryADOQ.Eof then
  begin
    showmessage('没有资料可以汇出,谢谢!');
    exit;
  end;

//ShowMessage('2');
  if not qryADOQ.Active then
  begin
    showmessage('数据集未开启,请先查询后再尝试汇出资料!');
    exit;
  end;

//ShowMessage('Filefmt...');

case cmbfmt.ItemIndex of
    0:
      begin
        expclass:=tdbgridehexportasxls;
        //ShowMessage('xls...');
        filename:='.xls';
        savedialog1.Filter := '*.xls|*.xls'
      end;
    1:
      begin
        expclass:=tdbgridehexportastext;
        filename:='.txt';
        savedialog1.Filter := '*.txt|*.txt'
      end;
    2:
      begin
        expclass:=tdbgridehexportashtml;
        filename:='.html';
        savedialog1.Filter := '*.html|*.html'
      end;
    3:
      begin
        expclass:=tdbgridehexportasrtf;
        filename:='.rtf';
        savedialog1.Filter := '*.rtf|*.rtf'
      end;
    4:
      begin
        expclass:=tdbgridehexportascsv;
        filename:='.csv';
        savedialog1.Filter := '*.csv|*.csv'
      end;
    else
      savedialog1.Filter := '*.*|*.*';
  end;

if savedialog1.Execute then
  begin
    try
      //showmessage(sample.cmbgd.Text);
      //exit;
      //filename:=sample.cmbgd.Text + filename;
      //savedialog1.FileName:=filename;
      //savedialog1.FileName :=  + filename;
      //filename := savedialog1.FileName;
      //ShowMessage(savedialog1.FileName);
      if savedialog1.FileName = '' then
      begin
        SfisPCDataModule.systemHits('请输入文件名, 谢谢...', '提示', 0);
        exit;
      end;

FileName := savedialog1.FileName + FileName;
      //ShowMessage(FileName);
      if fileexists(FileName) then
      begin
        if application.MessageBox('文件已存在,是否覆盖 ?','提示',mb_iconinformation+mb_yesno)=idyes  then
          deletefile(filename)
        else
          exit
      end;

//开始汇出资料.........
      savedbgridehtoexportfile(expclass, qryExportDBGridEh, filename, true);
      //savedbgridehtoexportfile(expclass,frmsample.DBGridEh2,'D:\111.txt',true);

application.MessageBox(PCHAR('成功汇出 ' + IntToStr(qryADOQ.RecordCount) + ' 笔资料! '),'提示',mb_iconinformation+mb_ok);
    except
      application.MessageBox('出现错误,汇出资料失败! ','提示',mb_iconinformation+mb_ok);
    end;
  end;

modalResult := mrOK;

end;

Delphi导出数据的多种方法的更多相关文章

  1. Delphi 导出数据至Excel的7种方法【转】

    一; delphi 快速导出excel   uses ComObj,clipbrd;   function ToExcel(sfilename:string; ADOQuery:TADOQuery): ...

  2. Delphi 导出数据至Excel的7种方法

    一; delphi 快速导出excel uses ComObj,clipbrd; function ToExcel(sfilename:string; ADOQuery:TADOQuery):bool ...

  3. 用 Python 排序数据的多种方法

    用 Python 排序数据的多种方法 目录 [Python HOWTOs系列]排序 Python 列表有内置就地排序的方法 list.sort(),此外还有一个内置的 sorted() 函数将一个可迭 ...

  4. mysql mysqldump只导出表结构或只导出数据的实现方法

    mysql mysqldump只导出表结构或只导出数据的实现方法,需要的朋友可以参考下. mysql mysqldump 只导出表结构 不导出数据 复制代码代码如下: mysqldump --opt ...

  5. 浅谈控件(组件)制作方法一(附带一delphi导出数据到Excel的组件实例)(原创)

    来自:http://blog.csdn.net/zhdwjie/article/details/1490741 -------------------------------------------- ...

  6. 导出数据到Excel方法总结

    一,问题的提出 近来在网上经常有人问怎样把数据导出到Excel中?针对这个问题网上也有很多资料.大都比较的琐碎.本人当前从事的项目中,刚好涉及到这些内容.就顺便做了一些归纳整理.共享给大家.避免大家再 ...

  7. mysqldump只导出表结构或只导出数据的实现方法【转】

    mysql mysqldump 只导出表结构 不导出数据 mysqldump --opt -d 数据库名 -u root -p > xxx.sql 备份数据库 #mysqldump 数据库名 & ...

  8. <转>.php导出excel(多种方法)

    基本上导出的文件分为两种:1:类Excel格式,这个其实不是传统意义上的Excel文件,只是因为Excel的兼容能力强,能够正确打开而已.修改这种文件后再保存,通常会提示你是否要转换成Excel文件. ...

  9. SQL Server 2008 R2导出数据脚本的方法

    以前看到有些朋友说必须SQL Server 2008才能导出包含数据的脚本,后来仔细研究发现其实SQL Server 2008 R2也是可以的,只需在导出的时候在高级中设置一下即可. 1.首先在数据库 ...

随机推荐

  1. Codechef MGCHGYM Misha and Gym 容斥、背包、Splay

    VJ传送门 简化题意:给定一个长度为\(N\)的数列,\(Q\)个操作: \(1\,x\,a\).将数列中第\(x\)个元素改为\(a\) \(2\,l\,r\).反转子序列\([l,r]\) \(3 ...

  2. Lean Data Innovation Sharing Salon(2018.09.15)

    时间:2018.09.15地点:北京国华投资大厦

  3. WPF 任务栏背景闪烁提醒

    原文:WPF 任务栏图标闪烁提醒   public static class FlashWindow { [DllImport("user32.dll")] [return: Ma ...

  4. WD与循环 组合数学

    WD与循环 LG传送门 为什么大家都是先算\(n\)个数的和等于\(m\)的情况再求前缀和? 既然已经想到了插板法,为什么不直接对\(n\)个数的和\(\le m\)的情况做呢? 基本套路没有变:考虑 ...

  5. 基于uFUN开发板的心率计(三)Qt上位机的实现

    前言 上两周利用周末的时间,分别写了基于uFUN开发板的心率计(一)DMA方式获取传感器数据和基于uFUN开发板的心率计(二)动态阈值算法获取心率值,介绍了AD采集传感器数据和数据的滤波处理获取心率值 ...

  6. vue + element 实现登录注册(自定义表单验证规则)

    注册页包含手机验证码登录和密码的二次验证. 效果如下: 实现代码: <template> <div> <div class="register-wrapper& ...

  7. pycharm2019注册码一键实时获取,永久有效!

    pycharm2019专业版激活码 56ZS5PQ1RF-eyJsaWNlbnNlSWQiOiI1NlpTNVBRMVJGIiwibGljZW5zZWVOYW1lIjoi5q2j54mI5o6I5p2 ...

  8. Mvc_前后端绑定数据json集合

    ViewBag.SysModuleList =new  List<SysModule>(){.....}; var data = @Html.Raw(Json.Encode(ViewBag ...

  9. 做完小程序项目、老板给我加了5k薪资~

    大家好,我是苏南,今天要给大家分享的是最近公司做的一个小程序项目,过程中的一些好的总结和遇到的坑,希望能给其他攻城狮带来些许便利,更希望能做完之后老板给你加薪- 今天是中秋节的第一天,假日的清晨莫名的 ...

  10. 深入浅出Automation Anywhere

    Automation Anywhere是基于CLIENT-SERVER架构(control room和客户端),客户端主要是Bot Creator 和 BotRunner 主要构成: 1.WEBCR: ...