您好,欢迎来到钮旅网。
搜索
您的当前位置:首页用C++实现DBF数据表与Excel数据表的转换

用C++实现DBF数据表与Excel数据表的转换

来源:钮旅网
龙源期刊网 http://www.qikan.com.cn

用C++实现DBF数据表与Excel数据表的转换

作者:曹 敏

来源:《中国教育信息化·高教职教》2008年第06期

摘 要:本文用C++设计了一种工具软件,将现有的Excel表的信息,通过该软件导入到指定的DBF注册表里,省去了重新输入的巨大工作量。 关键词:Excel表 VFP C++

中图分类号:TP311.52 文献标识码:B 文章编号:1673-84(2008)11-0058-03

在office办公软件在我国普及的今天,基础信息往往是以Excel表的形式存储,但Excel表不能实现信息化的复杂管理,于是就要用VFP开发数据管理软件,这就要求将现有的Excel表的数据导入到VFP开发的管理系统的数据表中,而市场上这种转换工具软件又很少,而且不能满足千差万别Excel格式转换到指定的DBF表的要求,基于此,笔者研究出一种软件解决此类问题。

一、技术实现路线

1.不同版本的Excel表的存储格式不同,要直接转换到指定的DBF表下,要进行复杂的重复代码编程,以致广大用户无法实现自主转换,因此开发一个通用性的转换工具软件是最终的目标。

2.要想作成通用的转换工具软件,必须首先将Excel表转换为文本文件(带制表分隔符),文本文件是最基础的文件形式,读取不需要任何中间的动态链接库等复杂的调用,该文本文件的关键是以制表分隔符号ASC码9作为每列的分隔标志,以ASC码10和13作为每一行的换行符号,这就为转化工具的开发奠定了基础。

3.实现Excel表转换必须满足如下要求:①必须去掉带有合并单元格的内容;②每列内容必须左对齐;③每单元格内容不能折行显示;④删除空列内容;⑤从右下角开始选取转换的表内容;⑥选择“文件”-“另存为”-存储类型为“文本文件(制表分隔符)(*.txt)”。

龙源期刊网 http://www.qikan.com.cn

4.创建的DBF数据库类,笔者用C++经过长期剖析DBF各个版本的底层代码、存储方式、结构体构成等等技术细节,创建了DBF类,对字段构成、数据存储、记录的读取,都有完整的函数,为转换奠定了基础。

5.文本文件的读取,定义一个buffer字符型缓冲变量,ASC码10作为换行符号读到buffer里,然后以ASC码12作为提取每个字串的分隔符号,提取字符串,然后通过DBF数据库的写入函数,将字串写入到指定记录的对应字段里。

6.必须设计一个通用完整的工具软件界面,进行通用的开发,为广大用户灵活使用。

二、代码实现介绍

1.这个事件函数是导入文本文件,并自动识别文本分隔符号,将第一行字段按照分隔符号将内容显示到列表框里,为和DBF字段建立对应关系做准备。 void __fastcall TForm1::Button2Click(TObject *Sender) {String name,dir0;

//下面代码是获取当前exe文件名和路径 name=ExpandFileName(Application->ExeName); dir0=ExtractFilePath(name);

Form1->OpenDialog2->InitialDir=dir0; struct ffblk fblk;

if(Form1->OpenDialog2->Execute())//若打开文本文件 {Form1->ListBox2->Clear();

String txtc=Form1->OpenDialog2->FileName; strcpy(txtp,txtc.c_str());

String filename=ExtractFileName(txtp);

龙源期刊网 http://www.qikan.com.cn

dir0=dir0+filename;

int

one=findfirst(dir0.c_str(),&fblk,FA_RDONLY|FA_HIDDEN|FA_DIREC|FA_SYSTEM|FA_ARCH); if(one!=0)//将文本文件拷贝到当前路径下 CopyFile(txtp,dir0.c_str(),0);

//显示选准的文本文件到软件窗体的下部提示框里 Form1->StatusBar1->Panels->Items[3]->Text=txtp; FILE *fp;

char qlc[1262];//定义获取一行文本文件字符串 struct yige{char c;}; struct yige yige; long size=0; struct ffblk fblk;

int

done=findfirst(txtp,&fblk,FA_RDONLY|FA_HIDDEN|FA_DIREC|FA_SYSTEM|FA_ARCH); if(done==0)size=fblk.ff_fsize; int i,n=0;

fp=fopen(txtp,\"rt\"); for(i=0;i<size;i++)

{ fread(&yige,sizeof(yige),1,fp);

//如果没有遇到ASC码10硬回车符号,继续赋值字符给qlc if(yige.c!=10) { qlc[n]=yige.c;

龙源期刊网 http://www.qikan.com.cn

n=n+1; }

if(yige.c==10)//如果遇到硬回车符号就结束qlc的取值 { qlc[n]='\\0'; i=size+10; } } fclose(fp);

tec=9;//分隔符号为ASC码9作为分隔符号 //获取第一行字符串里的分隔符号数kgs int kgs=KGS2(qlc,tec); int j; char dlc[262];

//将第一行字串里的ASC码9作为分隔符号一一取出来,显示在列表框控件ListBox2里 for(j=1;j<=kgs+1;j++) { strcpy(dlc,KGC2(qlc,j,tec));

Form1->ListBox2->Items->Add(dlc); } } }

龙源期刊网 http://www.qikan.com.cn

//以上是获取文本文件并将其第一行按照ASC码9分隔将字符串显示在列表框里的操作。 2.将分隔符号对应的文本字符串写入指定的DBF库。 long size=0;//存放文本文件的字节数

int

done=findfirst(txtp,&fblk,FA_RDONLY|FA_HIDDEN|FA_DIREC|FA_SYSTEM|FA_ARCH); if(done==0)size=fblk.ff_fsize; FILE *fp;

struct yige{char c;};//定义从文本文件中取字符的结构体 struct yige yige;

char qlc[562];//定义取一行文本字符串qlc strcpy(qlc,\"\"); fp=fopen(txtp,\"rb\");

龙源期刊网 http://www.qikan.com.cn

int n=0; int i;

int rec=dbfrec(tmp)+1;//获取DBF数据库记录数 int hss=1;

char cc1[262],cc2[262],cc3[262]; for(i=0;i<size;i++)

{ fread(&yige,sizeof(yige),1,fp);

if(yige.c!=10) { qlc[n]=yige.c; n=n+1; if(n>0)

{ Application->MessageBox(\"文本文件一个太长,终止转换返回\信息\ return ; } }

if(yige.c==10)//遇到换行符号就结束 { qlc[n]='\\0'; n=0; }

if(strlen(qlc)>0)//如果获取的字串非空 { hss=hss+1;

龙源期刊网 http://www.qikan.com.cn

int hi;

String d1,d2,d3,d4;

//DBF数据表和文本文件分隔符号,建立的对应关系,照此将文本字串导入到相应记录的相应字段里

for(hi=0;hi<Form1->ListBox3->Items->Count;hi++) { d1=Form1->ListBox4->Items->Strings[hi]; int l=d1.Pos(\" \");

int l1=StrToInt(d1.SubString(1,l-1));

int l2=StrToInt(d1.SubString(l+1,d1.Length()-l)); strcpy(cc1,KGC2(qlc,l2,tec)); l=strlen(cc1);

for(;l<zds[l1].with;l++) cc1[l]=' '; //2007.05.19修改 cc1[zds[l1].with]='\\0';

//将文本字串写入到DBF数据表的对应字段里,xdbfwjzd(…)是个关键函数,tmp是DBF数据库名称,zds[l1].zd是DBF数据库字段,rec是记录位置,cc1是文本文件的字串 xdbfwjzd(tmp,zds[l1].zd,rec,cc1); } rec=rec+1; qlc[0]='\\0'; } } }

龙源期刊网 http://www.qikan.com.cn

三、软件使用界面介绍

图1是通用转换工具的界面,本篇文章只介绍了Excel表以列形式导入到DBF数据表里,实际上该工具软件还可以将DBF数据导出为文本文件和Excel表,还可以将DBF数据通过关联直接将DBF的数据填写到Excel表的指定单元格里。

该工具软件已成功应用到山西省中等职业教育信息管理系统中,作为中等职业学生注册信息的辅助工具,受到了400多所学校使用者的好评,将现有Excel表的学生信息,通过该软件导入到指定的DBF注册表里,省去了重新输入的巨大工作量。

因篇幅问题不能全部显示,请点此查看更多更全内容

Copyright © 2019- niushuan.com 版权所有 赣ICP备2024042780号-2

违法及侵权请联系:TEL:199 1889 7713 E-MAIL:2724546146@qq.com

本站由北京市万商天勤律师事务所王兴未律师提供法律服务