一种高效的Excel表导入数据库的实现方法

时间:2022-10-07 05:03:10

一种高效的Excel表导入数据库的实现方法

摘要:本文是在开发数据库管理系统的实践中,为解决把大量以Excel表形式保存的学生历史考试成绩自动录入数据库的问题,提出了一种利用PowerBuilder特有的数据窗口、OLE技术以及对文件进行操作的函数等把Excel表导入SQL Server数据库的一种高效率的实现方法,并在所研发的系统中运行成功。

关键词:Excel表;PowerBuilder;数据库;数据窗口

中图分类号:TP311文献标识码:A文章编号:1009-3044(2008)16-21179-03

A High-efficiency Method for Switching Excel-data Into Database

KANG Ya,SHAO Kang,WU Man-yi

(Institute of Economy and Management, Anhui University of Science & Technology,Huainan 232001,China)

Abstract: In order to switch massive data saved as excel table into database automatically, proposed one kind of high-efficiency method for switching data saved as excel table into database by using the PowerBuilder’s unique data window, the OLE technology as well as function on the operation to the document, and it was run successfully in practice.

Key words: excel table; PowerBuilder; database; data-window

1 引言

在开发数据库管理系统时经常会遇到对大量历史数据进行录入的问题,如果手动录入一条一条的记录既费时费力又容易出错,因此客户经常要求把一些大量的历史数据能够自动录入到数据库中去。在为安徽淮南实验中学开发教务管理系统的过程中就遇到类似的问题,校方要求能够把大量以Excel表形式保存的学生历史考试成绩自动录入数据库,这个问题必须很好的解决,否则开发出来的系统不可能令校方满意。目前解决类似问题的常用方法是将Excel格式数据文件转存为文本文件[1],再设法导入数据库中。文献[1]中详细阐述了用这种方法把Excel数据导入Oracle数据库中。但是这种方法使用起来不太方便,如果在实际应用中让使用方增加一步这种操作,肯定是不合适的。还有些方法可以实现把Excel表数据直接导入数据库,但是要按记录逐条导入,也比较麻烦。因此,本文提出了一种把Excel表直接导入数据库的实现方法。

2 理论分析

2.1 数据窗口

数据窗口是PowerBuilder的一大特色,数据窗口对象是数据窗口的一个组成部分,也是PowerBuilder的一大特色,它为我们操作数据库中的数据提供了一种直观有效的手段,利用它可以方便地进行连接数据库,以自己喜欢的方式显示数据库中的数据以及修改数据库[2]。PowerBuilder为数据窗口对象提供了11种显示风格,每种风格只是定义了数据窗口的基本显示样式,在此基础上可以进一步对数据窗口对象以及它所包含的其它对象的属性进行设置,从而构造出千边万化的数据显示界面[3]。

2.2 GetFileOpenNam()函数

功能:显示打开文件对话框,让用户选择要打开的文件。

语法:GetFileOpenName(title,pathname,filename{,extension{,filter}})。

示例:下面的代码显示“打开文件”对话框,之后打开用户选择的文件,对话框中显示TXT和DOC类型文件:

string docname , named

integer value

value=GetFileOpenName(“打开文件”,docname,named,”DOC”,”本文件(*.TXT),*.TXT”&

+”DOC文件(*.DOC),*.DOC”)

if value=1 then FileOpen(docname)[4]

2.3 ImportFile()函数

数据窗口的ImportFile函数可以将满足某种格式的外部数据读入到数据窗口中,该函数语法如下:

ImportFile(filename{,startrow {,endrow {,startcolumn {,endcolumn ,{dwstartcolumn}}}}})。

2.4 OLE技术

PowerBuilder 支持OLE(Object Linking and Embedding) , 即对象链接与嵌入。OLE 是一种为Windows 设计的交互进程通信机制, 实际上是一种编程接口。OLE 自动化技术使得用户不仅能操纵驻留在自己应用程序里的对象, 而且能操纵驻留在系统上的其他程序中的对象。要实现OLE 技术, 首先要用OLE 对象OLEObject 声明一个OLEObject 实例,然后创建该对象的实例,创建方法如下:

OLEObject oleobjectname

Oleobjectname = create OLEObject[5]。

在对安徽淮南实验中学保存的学生成绩表进行仔细研究后发现,这些表格都保存在电脑指定的硬盘上,且都有相同的表结构,根据这一特点考虑利用PowerBuilder中与Excel表样式比较像的grid风格的数据窗口,利用OLE技术结合GetFileOpenName()、ImportFile()等函数来实现把Excel表导入SQL Server 2000数据库中。

3 具体实现方法

在开发安徽淮南实验中学教务管理系统中具体实现把Excel表导入SQL Server数据库中的方法如下:

3.1 字段设计

创建grid风格数据窗口对象d_sjdr(如图1),数据源为数据库中已经创建好的xscjb表,选取的字段与Excel表的一致,变量类型也要一致(如图2)。

■ ■

图1grid风格数据窗口对象d_sjdr图2Excel表

3.2 代码设计

创建窗口w_sjdr,并添加一个数据窗口控件dw_1,dataobject为d_sjdr,两个命令按钮控件cb_1、cb_2,在Excel表导入按钮中写如下代码:

String pathname,filename

Int openname_return

openname_return=GetFileOpenName("打开文件",pathname, filename, "TXT", "文本文件 (*.TXT),*.TXT," + "Excel文件 (*.XLS),*.XLS")

IF openname_return=1 THEN

IF Upper(Right(filename,3))="TXT" THEN

dw_1.ImportFile(pathname)

ELSE

OLEObject ExcelServer

Long excelok

String str_savename

ExcelServer = CREATE OLEObject

ExcelOK = ExcelServer.ConnectToNewObject( "excel.application" )

IF excelok < 0 THEN

messagebox("连接excel失败,检查你的系统是否安装了office",string(excelok))

ELSE

ExcelServer.Workbooks.Open(pathname)

str_savename="c:\temp.txt"

ExcelServer.activeworkbook.saveas(str_savename,3)

ExcelServer.displayalerts=False

ExcelServer.quit()

ExcelServer.DisconnectObject()

DESTROY ExcelServer

dw_1.ImportFile(str_savename)

filedelete(str_savename)

END IF

END IF

END IF

在保存按钮中写入如下代码:

string ls_nj,ls_bj,ls_xm

decimal ls_yw,ls_sx,ls_yy,ls_zz,ls_ls,ls_dl,ls_sw,ls_wl,ls_hx

string ls_kc,ls_rxnf

long ll_check

long ll_rowcount,i,j

ll_rowcount=dw_1.rowcount()

if ll_rowcount

messagebox("系统提示","没有要执行的记录!")

return

end if

for i=1 to ll_rowcount

ls_nj=dw_1.object.nj[i]

ls_bj=dw_1.object.bj[i]

ls_xm=dw_1.object.xm[i]

ls_yw=dw_1.object.yw[i]

ls_sx=dw_1.object.sx[i]

ls_yy=dw_1.object.yy[i]

ls_zz=dw_1.object.zz[i]

ls_ls=dw_1.object.ls[i]

ls_dl=dw_1.object.dl[i]

ls_sw=dw_1.object.sw[i]

ls_wl=dw_1.object.wl[i]

ls_hx=dw_1.object.hx[i]

ls_kc=dw_1.object.kc[i]

ls_rxnf=dw_1.object.rxnf[i]

insert into xscjb

(nj,bj,xm,yw,sx,yy,zz,ls,dl,sw,wl,hx,kc,rxnf)

values(:ls_nj,:ls_bj,:ls_xm,:ls_yw,:ls_sx,:ls_yy,:ls_zz,:ls_ls,:ls_dl,:ls_sw,:ls_wl,:ls_hx,:ls_kc,

:ls_rxnf);

commit;

next

messagebox("系统提示","成绩录入成功!")

4 运行结果

在系统主界面菜单中点数据导入子菜单,在弹出的窗口中点Excel表导入按钮,弹出打开文件对话框,找到要打开的Excel表所在的路径,在文件类型中选择Excel文件(*.XLS),选中存放学生成绩的Excel表格文件,点打开就可以把成绩读人到当前数据窗口中(如图3),与原始数据进行对比,发现完全一致,再点保存按钮即可把数据录入到数据库中。

在程序运行时如果创建数据窗口对象选取的字段与Excel表的不一致,或者系统没有安装office软件,都会出现运行错误,这两点一定要注意,否则不能实现预期的功能。

图3 运行结果

5 结束语

本文提出了一种利用PowerBuilder特有的数据窗口、OLE技术以及对文件进行操作的函数等把Excel表导入SQL Server 2000数据库的实现方法,该方法已成功应用于安徽淮南实验中学教务管理系统研发中,系统的运行环境是Windows XP 。实践证明该方法在程序设计上比较简单易行,而且效率非常高,它可以把大量的数据一次性导入,比按记录行一条一条导入的方法效率高的多,可以很好的解决目前客户对系统历史数据录入的需求问题,具有很强的实用性,可供开发数据库管理系统时借鉴。

参考文献:

[1] 马栎.如何将Excel、Access、FoxPox数据导入Oracle数据库[J].电脑开发与应用,2005(11):64.

[2] 吕晓辉. PowerBuilder9.0全方位教程[M].北京:航空工业出版社,2003:196.

[3] 陈永强,等.PowerBuilder数据库开发经典实例精解[M].北京机械工业出版社,2007:161.

[4] 郑启迪,等.PowerBuilder9.0经典范例50讲[M].北京:兵器工业出版社、北京希望电子出版社,2005:28-29.

[5] 潘峰,等.PowerBuilder中通过OLE实现复杂Excel报表[J].电脑知识与技术,2006(8):158.

注:本文中所涉及到的图表、注解、公式等内容请以PDF格式阅读原文。

上一篇:基于Trace的跨站漏洞攻击及其防范对策 下一篇:网络环境下学习者新特征探析