Delphi里,把数据导入到Excel中,希望点击按钮会出现一个“另存为”的对话框,用代码如何实现?

解决方案 »

  1.   


    前题ADOQUERY控件的SQL句 select x_a as 工号,x_b 姓名,x_c 部门 from x_eng 加入AS是为了标题显示中文}
    uses
    ComObj//方法:
    procedure TForm1.DataSetToExcel(ADataSet: TCustomADODataSet;
      const AFileName: string);
    var
      Table, ExcelApp, ExcelBook, ExcelSheet: Variant;
    begin
      if not ADataSet.Active then Exit;
      ExcelApp := CreateOleObject('Excel.Application');
      ExcelApp.DisplayAlerts := False;
      ExcelBook := ExcelApp.WorkBooks.Add;
      ExcelSheet := ExcelBook.Sheets.Item[1];
      Table := ExcelSheet.QueryTables.Add(ADataSet.Recordset, ExcelSheet.Range['A1']);
      Table.Refresh(True);
      ExcelBook.Close(True, AFileName);
    end;//调用
    procedure TForm1.Button1Click(Sender: TObject);
    begin
     if SaveDialog1.Execute then begin
      DataSetToExcel(ADOquery1, SaveDialog1.FileName);
     end;
    end;
      

  2.   

    另:SaveDialog1.DefaultExt:='xls';
    SaveDialog1.Filter:='*.xls|*.xls';
      

  3.   

    全代码:unit Unit1;interfaceuses
      Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
      Dialogs, StdCtrls, Buttons,ComObj,DB, ADODB;type
      TForm1 = class(TForm)
        Button1: TButton;
        Edit1: TEdit;
        Label1: TLabel;
        SaveDialog1: TSaveDialog;
        BitBtn1: TBitBtn;
        ADOQuery1: TADOQuery;
        ADOConnection1: TADOConnection;
        procedure BitBtn1Click(Sender: TObject);
      private
        { Private declarations }
      public
        { Public declarations }
        procedure DataSetToExcel(ADataSet: TCustomADODataSet;//声明
      const AFileName: string);
      end;var
      Form1: TForm1;implementation{$R *.dfm}
    procedure TForm1.DataSetToExcel(ADataSet: TCustomADODataSet;
      const AFileName: string);
    var
      Table, ExcelApp, ExcelBook, ExcelSheet: Variant;
    begin
      {定义}
      if not ADataSet.Active then Exit;
      ExcelApp := CreateOleObject('Excel.Application');
      ExcelApp.DisplayAlerts := False;
      ExcelBook := ExcelApp.WorkBooks.Add;
      ExcelSheet := ExcelBook.Sheets.Item[1];
      Table := ExcelSheet.QueryTables.Add(ADataSet.Recordset, ExcelSheet.Range['A1']);
      Table.Refresh(True);
      ExcelBook.Close(True, AFileName);
    end;
    procedure TForm1.BitBtn1Click(Sender: TObject);
    begin
    {调用}
    SaveDialog1.DefaultExt:='xls';
    SaveDialog1.Filter:='*.xls|*.xls';
    if SaveDialog1.Execute then begin
      DataSetToExcel(ADOquery1, SaveDialog1.FileName);
     end;end;end.
      

  4.   

    记住要加一个SaveDialog控件,在delphi控件页dialogs这个页面
      

  5.   

    基本按照你的第二种说法做了,可是出现一个很奇怪的问题,无论我把文件设置保存在哪个目录下,程序运行结果都是默认保存到“我的文档”里,为什么?
    还有,为什么是ExcelBook.Close(True, AFileName),而不是ExcelBook.Close;
      

  6.   

    问题一:
    1.出现选择文件名及路径选择,你可以选择要保存的位置.
    2:
    expression.Close(SaveChanges, Filename, RouteWorkbook)expression 必需。该表达式返回上述对象之一。SaveChanges Variant 类型,可选。如果工作簿没有改变,则忽略此参数;如果工作簿发生了改变并且在另外的窗口中也打开了该工作簿,则仍然忽略此参数;如果工作簿发生了改变并且没有在另外的窗口中打开,则此参数将指定是否在工作簿中保存所发生的更改。取值与操作如下表所示:值作用True将改变保存到工作簿。如果该工作簿尚未命名,则使用 FileName 指定的名称。如果省略 FileName 参数,则要求用户输入文件名。False不将改变保存到此文件。省略显示一个对话框,要求用户决定是否保存所做的更改。 
    FileName Variant 类型,可选。以此文件名保存所做的更改。RouteWorkbook Variant 类型,可选。如果指定工作簿不需要传送给下一个收件人(没有传送名单或已经传送),则忽略该参数。否则,Microsoft Excel 将按照下表所示处理传送。3.我用了这个方法已经还下三年有多了,一直都好正常的.
      

  7.   

    弱弱的问下,我是用delphi控件创建excel,不是动态创建的,方法一样吗?