转至繁体中文版     | 网站首页 | 图文教程 | 资源下载 | 站长博客 | 图片素材 | 武汉seo | 武汉网站优化 | 
最新公告:     敏韬网|教学资源学习资料永久免费分享站!  [mintao  2008年9月2日]        
您现在的位置: 学习笔记 >> 图文教程 >> 软件开发 >> Delphi程序 >> 正文
Delphi3如何调用Excel         ★★★★

Delphi3如何调用Excel

作者:闵涛 文章来源:闵涛的学习笔记 点击数:587 更新时间:2009/4/23 18:24:37
 Delphi功能强大,常被选择用来开发数据库管理软件的首选工具。在开发数据库管理软件时,经常涉及到报表的制作与输出。而Excel又特别擅长于报表和数据处理,且Excel能为Delphi或其他应用程序通过OLE所控制,因此,我们可以通过OLE向Excel传数据,作为数据库管理软件中,制作报表的又一范例。
  首先,我们来了解一下Excel的自动化对象,Excel有一个Application对象,一个WorkBook对象,一个Range对象和一个Sheet对象,当然你可以从MicroSoft Excel Visual Basic的帮助中了解更多的内容,因此,我们可以从Delphi的应用程序中通过OLE轻松的使用Excel的优点。
  由于,Delphi无法对某个OLE方法或属性的调用进行运行时的语法检查。例如:以下这段代码,虽然Delphi可以对它进行成功的编译,但在运行时它却不能被正确的执行,因为在Excel Basic中没有FormatDriveC这个函数:
  var
  V:variant;Begin
  V:=CreateOleObject(‘Excel.Application’)
  V.FormatDriveC;End;
  以下为一个例子,说明如何使用Delphi将数据表中的数据传送给Excel的。
  注意:运行本程序,你的机器中必须已经安装了Excel。
  unit Unit1;
  interface
  uses
  Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,olectnrs,
  StdCtrls, Buttons, Grids, DBGrids, ExtCtrls, Db, DBTables,ComObj;
  type
  TMainForm = class(TForm)
  DataSource1: TDataSource;
  Table1: TTable;
  Panel1: TPanel;
  DBGrid1: TDBGrid;
  Panel2: TPanel;
  BitBtn1: TBitBtn;
  BitBtn2: TBitBtn;
  CheckBox1: TCheckBox;
  procedure BitBtn2Click(Sender: TObject);
  procedure BitBtn1Click(Sender: TObject);
  procedure FormShow(Sender: TObject);
  procedure FormClose(Sender: TObject; var Action: TCloseAction);
  procedure FormCreate(Sender: TObject);
  private
  { Private declarations }
  public
  { Public declarations }
  end;
  var
  MainForm: TMainForm;
  implementation
  {$R *.DFM}
  procedure TMainForm.BitBtn2Click(Sender: TObject);begin
  close;end;
  procedure TMainForm.BitBtn1Click(Sender: T ect);var
  v:variant;
  s:string;
  i,j:integer;begin
  s:="c:\gz\example.xls"; //文件名
  if fileexists(s) then deletefile(s);
  v:=CreateOLEObject("Excel.Application"); //建立OLE对象
  V.WorkBooks.Add;
  if Checkbox1.Checked then
  begin
  V.Visible:=True;
  MainForm.WindowState:=wsMinimized;
  //使Excel可见,并将本程序最小化,以观察Excel的运行情况
  end else
  begin
  V.Visible:=False;
  end;
  //使Excel窗口不可见
  Application.BringToFront; //程序前置
  try
  try
  Cursor:=crSQLWait;
  Table1.DisableControls;
  For i:=0 to Table1.FieldCount-1 do //字段数
  //注意:Delphi中的数组的下标是从0开始的,
  // 而Excel的表格是从1开始编号
  begin
  V.Goto("R1"+"C"+IntToStr(i+1)); //Excel的表格是从1开始编号
  V.ActiveCell.FormulaR1C1:=Table1.Fields[i].FieldName;//传送字段名
  end;
  j:=2;
  Table1.First;
  while not Table1.EOF do
  begin
  For i:=0 to Table1.FieldCount-1 do //字段数
  begin
  V.Goto("R"+IntToStr(j)+"C"+IntToStr(i+1));
  V.ActiveCell.FormulaR1C1:=Table1.Fields[i].AsString;//传送内容
  end;
  Table1.Next;
  j:=j+1;
  end;
  V.ActiveSheet.Protect(DrawingObjects:=True, Contents:=True, Scenarios:=True);//设置保护
  ShowMessage("数据库到Excel的数据传输完毕!");
  v.ActiveWorkBook.Saveas(filename:=s);//文件存盘
  except //发生错误时
  ShowMessage("没有发现Excel!");
  end;
  finally
  Cursor:=crDefault;
  Table1.First;
  Table1.EnableControls;
  v.quit; //退出OLE对象
  MainForm.WindowState:=wsNormal;
  end;end;
  procedure TMainForm.FormShow(Sender: TObject);begin
  Table1.Open;end;
  procedure TMainForm.FormClose(Sender: TObject; var Action: TCloseAction);begin
  Table1.Close;end;
  procedure TMainForm.FormCreate(Sender: TObject);var
  sl:TStringList; {字符串列表变量}
  i:Integer;begin
  sl:=TStringlist.Create;
  Session.GetAliasNames(sl); {取得别名列表}
  if (sl.IndexOf("EXAMPLE")=-1) then {判断别名是否存在}
  begin
  i:=Application.MessageBox("别名EXAMPLE不存在,现在创建吗?","BDE信息窗口",mb_OKCancel);
  {增加一个名为EXAMPLE的数据库别名}
  if i=IDCANCEL then begin
  sl.Free;
  Application.Terminate; //程序终止
  end;
  Session.AddStandardAlias("EXAMPLE","C:\GZ","Paradox"); //增加别名
  Session.SaveConfigFile; {BDE配置文件存盘}
  end ;end;
  end.执行本程序,就把数据表中内容输出到C:\GZ下的example.xls文件中了,你可以用Excel对本文件进行编辑等操作。
  本程序只要拷贝到C:\GZ下运行即可,程序判断后自动增加数据库别名。
  本文只是对Delphi中OLE的简单认识,程序的功能比较简单,当然你可以增加别的内容,以丰富本程序,如:可以增加选取数据库别名,再从别名中选取任何数据表,以增加程序的通用性,或者在程序中使用Excel的函数等。


没有相关教程
教程录入:mintao    责任编辑:mintao 
  • 上一篇教程:

  • 下一篇教程:
  • 【字体: 】【发表评论】【加入收藏】【告诉好友】【打印此文】【关闭窗口
      注:本站部分文章源于互联网,版权归原作者所有!如有侵权,请原作者与本站联系,本站将立即删除! 本站文章除特别注明外均可转载,但需注明出处! [MinTao学以致用网]
      网友评论:(只显示最新10条。评论内容只代表网友观点,与本站立场无关!)

    同类栏目
    · C语言系列  · VB.NET程序
    · JAVA开发  · Delphi程序
    · 脚本语言
    更多内容
    热门推荐 更多内容
  • 没有教程
  • 赞助链接
    更多内容
    闵涛博文 更多关于武汉SEO的内容
    500 - 内部服务器错误。

    500 - 内部服务器错误。

    您查找的资源存在问题,因而无法显示。

    | 设为首页 |加入收藏 | 联系站长 | 友情链接 | 版权申明 | 广告服务
    MinTao学以致用网

    Copyright @ 2007-2012 敏韬网(敏而好学,文韬武略--MinTao.Net)(学习笔记) Inc All Rights Reserved.
    闵涛 投放广告、内容合作请Q我! E_mail:admin@mintao.net(欢迎提供学习资源)

    站长:MinTao ICP备案号:鄂ICP备11006601号-18

    闵涛站盟:医药大全-武穴网A打造BCD……
    咸宁网络警察报警平台