//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. mybatis基础系列(四)——关联查询、延迟加载、一级缓存与二级缓存

    关本文是Mybatis基础系列的第四篇文章,点击下面链接可以查看前面的文章: mybatis基础系列(三)——动态sql mybatis基础系列(二)——基础语法.别名.输入映射.输出映射 mybat ...

  2. Nginx完美解决前后端分离端口号不同导致的跨域问题

    笔者在做前后端分离系统时,出现了很多坑,比如前后端的url域名相同,但是端口号不同.例如前端页面为:http://127.0.0.1/ , 后端api根路径为 http://127.0.0.1:888 ...

  3. PAT A1028 List Sorting (25 分)——排序,字符串输出用printf

    Excel can sort records according to any column. Now you are supposed to imitate this function. Input ...

  4. linux ntp 时间同步

    一.时间同步服务器可以将数据库服务器作为同步服务器ntp.conf 保持不变 //启动服务service ntpd start //设置ntpd服务自启动chkconfig ntpd on//检查ch ...

  5. android之WIFI小车编程详述

    有了前几篇wifi模块eps8266的使用,单片机设置eps8266程序,android TCP客户端,现在就做一个wifi小车 先上图 小车是四个轮子的,每个轮子上都有电机驱动,前进后退的时候四个轮 ...

  6. 关于x210开发板和主机、虚拟机ping通问题

    关于x210开发板和主机.虚拟机ping通问题: 步骤: 1.关闭 Ubuntu.关闭VMware软件: 2.打开 网络连接,设置 以太网 IP地址,并确认使用的网卡 3.以管理员身份打开VMware ...

  7. MongoDB的一些CURD操作

    MongoDB的一些增删改查命令操作: 官方文档参考  https://docs.mongodb.com/manual/reference/method/ https://docs.mongodb.c ...

  8. odoo之带出历史订单产品

    这是在sale_origin中下由两张单子{sale_origin_line和history_order} class history_order(osv.osv): _name="hist ...

  9. C#去除字符串中的反斜杠

    如下,可以使用C#的Replace()方法来替换,但有一点需要注意的是backslash(反斜杠)是特殊字符. string s = "[\"aaaaaaaaaaaaaaaaaaa ...

  10. flask多app和栈的应用

    一.简介     flask的蓝图可以实现url的分发,当有多个app时也可以利用app进行url分发,这里介绍下使用方式和内部原理以及栈的应用. 二.多app使用 使用示例 from werkzeu ...