您的位置:首页 > 编程语言 > Delphi

利用Delphi读写Excel信息

2008-10-14 11:13 302 查看

利用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;

(作者单位系总后后勤科学研究所)
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息