注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

郁夫的博客

我爱你们,只是你们不知道!

 
 
 

日志

 
 
 
 

利用Delphi读写Excel信息  

2012-09-17 11:07:30|  分类: DELPHI |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |

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

准备工作

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

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

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

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

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

  评论这张
 
阅读(306)| 评论(0)
推荐 转载

历史上的今天

在LOFTER的更多文章

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2017