利用Delphi读写Excel信息


利用Delphi读写Excel信息


■ 周艳会



如今,企业利用Excel编制了大量表格,积累了宝贵的数据资源。如果能将这些数据资源导入到机关办公系统或企业信息系统中,将有益于信息的深层利用。同时,在应用软件中加入对Excel信息的读写,也会使软件使用更方便,数据处理更灵活。

虽然,目前已经有一些处理Excel数据的控件,但一般觉得通用性差,使用起来不方便,难以满足具体应用开发需求。下面结合笔者的开发经验,介绍利用Delphi实现读写Excel信息的方法。

准备工作

首先,Delphi要在Uses部分,把要使用的外部程序的类写入。在这里,我们把“ExtCtrls,ComObj”写入Uses部分。其次,在程序变量声明部分声明要用到的变量:

VAR XL: Variant; Sheet: Variant; SFileName:string; J:integer;

假定Excel格式的Excel1表的内容、数据库表Table1的表结构如表所示。下面以这两个表为基础,介绍利用Delphi读写Excel信息的实现过程。

将Excel1的内容写入Table1中

第一步,创建Excel对象:

TRY XL := GetActiveOleObject('Excel.Application');

EXCEPT XL := CreateOleObject('Excel.Application'); END;

第二步,使用OpenDialog控件,找到将要打开的Excel文件并打开,假设将要读入的内容放在sheet1上:

OpenDialog1.Execute;

SFileName:=OpenDialog1.FileName;XL.WorkBooks.Open(SFileName);

Sheet := XL.WorkBooks[XL.WorkBooks.Count].WorkSheets[1];

第三步,打开接收Excel信息的数据表,假设在数据模块DBmain中,已设置ADO数据连接和数据访问QryTable1:

WITH DBMain.QryTable1 do BEGIN

if Active then close;SQL.Clear;SQL.Add('select * from Table1'); open;END;

第四步,使用循环,读入Excel1的数据,并追加入已连接并打开的数据表中:

J:=2; //从第2行开始//若收到时间、文件号均为空,则结束

WHILE (sheet.Cells[J,1].text< >'') and (sheet.Cells[J,2].text< >'') DO BEGIN

Append;

DBMain.QryTable1.FieldByName('SDSJ').Value:=sheet.Cells[J,1].Value;

DBMain.QryTable1.FieldByName('WJH').Value:=sheet.Cells[J,2].Value;

DBMain.QryTable1.FieldByName('CLQK').Value:=sheet.Cells[J,3].Value;

J:=J+1; END;

DBMain. QryTable1.UpdateBatch(); ShowMessage('成功接收Excel文件信息!');

第五步,最后键入“XL.Quit;”,退出Excel并释放所创建的对象。

将Table1的内容写入Excel1中

假设Table1的内容是已读入的Excel1的内容。与上例相同,也要在Uses部分加入“ExtCtrls,ComObj”;在Var部分声明XL和Sheet等变量。

第一步,创建Excel对象:

TRY XL := GetActiveOleObject('Excel.Application');

EXCEPT XL := CreateOleObject('Excel.Application'); END;

第二步,打开一个空的Excel文件。为了使Excel文件可读性更强,我们可预先准备一个格式规范的模板。使用OpenDialog控件,找到模板文件的路径,并打开,模板内容放在sheet1上:

OpenDialog1.Execute;

SFileName:=OpenDialog1.FileName; XL.WorkBooks.Open(SFileName);

Sheet := XL.WorkBooks[XL.WorkBooks.Count].WorkSheets[1];

第三步,打开提供数据的数据表Table1,假设在数据模块DBmain中,已设置ADO数据连接和数据访问QryTable1,则此处的代码如下:

WITH DBMain.QryTable1 do BEGIN if Active then close; SQL.Clear;

SQL.Add('select * from Table1 where SDSJ like '+ QuotedStr('2006年11月'+ '%')); open; END;

第四步,循环写入数据:

FOR J:=2 TO 2+DBMain. QryTable1.RecordCount DO BEGIN

sheet.Cells[J,1]:=DBMain.QryTable1.FieldByName('SDSJ').AsString;

sheet.Cells[J,2]:=DBMain.QryTable1.FieldByName('WJH').AsString;

sheet.Cells[J,3]:=DBMain.QryTable1.FieldByName('CLQK').AsString;

J:=J+1; if j!=2+DBMain. QryTable1.RecordCount then next;END;

第五步,最后保存Excel文件并退出,释放对象:

XL.WorkBooks[XL.WorkBooks.Count].SaveAS(SFileName); XL.Quit;

(作者单位系总后后勤科学研究所)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值