网站导航免费论文 原创论文 论文搜索 原创论文 网学软件 学术大家 资料中心 会员中心 问题解答 原创论文 论文素材 设计下载 最新论文 下载排行 论文上传 在线投稿 联系我们
返回网学首页
网学联系
最新论文 推荐专题 热门论文 素材专题
当前位置: 网学 > 编程文档 > DELPHI > 正文
Delphi和Excel的亲密接触
来源:Http://myeducs.cn 联系QQ:点击这里给我发消息 作者: 用户投稿 来源: 网络 发布时间: 12/10/12
下载{$ArticleTitle}原创论文样式

这两种方法的主要区别在于与服务器程序建立连接的方法,下面是通过类型库控制Excel的程序框架: uses Windows, ComObj, ActiveX, Excel_TLB;
var Excel: _Application;
LCID: integer;
Unknown:IUnknown;
Result: HResult;
begin LCID := LOCALE_USER_DEFAULT;
Result := GetActiveObject(CLASS_Application, nil, Unknown);
//尝试捕获运行中的程序实例 if (Result.MK_E_UNAVAILABLE) then Excel := CoApplication.Create //启动新的程序实例 else begin {检查GetActiveObject方法调用过程中的错误} OleCheck(Result);
OleCheck(Unknown.QueryInterface(_Application, Excel));
end;
…… //进行数据处理 Excel.Visible[LCID] := True;
// Excel.DisplayAlerts[LCID] := False;
//显示提示对话框 Excel.Quit;
End;
这里没有采用通常的try…except结构,是因为例外处理机制要进行复杂的OLE检查,降低了except部分的执行速度。
要注意,不同的Delphi版本生成的伴随函数CoApplication和一些常量名可能不同,应查看相应的类型库。
在调用Quit方法之前,一定要释放程序中创建的所有工作簿和工作表变量,否则Excel可能驻留在内存中运行(可以按下Ctrl+Alt+Del查看)。
调用GetActiveObject捕获程序实例还有一个小问题,如果Excel处于最小化运行状态,可能出现只显示程序主框架而用户区不可见的情况。
此外,如果不希望引入类型库,还可以采用滞后绑定的方法,不过速度要慢许多。
下面的例子声明了一个Variant变量来代表Excel应用程序: var Excel: Variant;
…… try Excel := GetActiveOleObject(''Excel.Application'');
except Excel := CreateOleObject(''Excel.Application'');
end;
Excel.Visible := True;
采用滞后绑定时,编译器不对调用的Excel对象方法进行检查,而把这些工作交给服务器程序在执行时完成,这样VBA所设置的大量默认参数(经常有十几个)就发挥了应有的作用,因此这种方法有一个意料不到的好处——代码简洁: var WBk, WS, SheetName: OleVariant;
.….. WBk := Excel.WorkBooks.Open(''C:\Test.xls'');
WS := WBk.Worksheets.Item[''SheetName''];
WS.Activate;
…… WBk.Close(SaveChanges := True);
Excel.Quit;
除了运行速度慢以外,如果要使用类型库中定义的常量,就只能自己动手了: const xlWBATWorksheet.-4167;
…… XLApp.Workbooks.Add(xlWBatWorkSheet);
最后不要忘记关闭Excel之后释放变量: Excel := Unassigned;
以下是本文例子中所用的源代码,在Delphi6+MSOffice2000下通过。
unit Unit1;
interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, OleServer, Excel2000, Grids, StdCtrls;
type TForm1.class(TForm) Button1: TButton;
StringGrid1: TStringGrid;
Excel: TExcelApplication;
procedure FormActivate(Sender: TObject);
procedure Button1Click(Sender: TObject);
private.Private declarations.procedure Write2Xls;
procedure OpenExl;
procedure CloseExl;
procedure AddFormula;
procedure NameSheet;
procedure Formats;
procedure AddMacro;
procedure Retrieve;
procedure Printit;
public.Public declarations.end;
var Form1: TForm1;
implementation {$R *.dfm} uses VBIDE2000;
var ir,ic:Integer;
wkSheet:_WorkSheet;
LCID:Integer;
wkBook:_WorkBook;
AName:Excel2000.Name;
procedure TForm1.FormActivate(Sender: TObject);
begin with StringGrid1 do begin Rows[0].CommaText:=''姓名,性别,年龄,电话'';
Rows.CommaText:=''张三,男,25,010-33775566'';
Rows.CommaText:=''李四,男,47,012-6574906'';
Rows.CommaT
  • 上一篇资讯: Delphi控制Excel2000
  • 网学推荐

    免费论文

    原创论文

    浏览:
    设为首页 | 加入收藏 | 论文首页 | 论文专题 | 设计下载 | 网学软件 | 论文模板 | 论文资源 | 程序设计 | 关于网学 | 站内搜索 | 网学留言 | 友情链接 | 资料中心
    版权所有 QQ:3710167 邮箱:3710167@qq.com 网学网 [Myeducs.cn] 您电脑的分辨率是 像素
    Copyright 2008-2015 myeducs.Cn www.myeducs.Cn All Rights Reserved
    湘ICP备09003080号