如何将word表格转换为数据库表(table),反之又如何实现(100分)

  • 主题发起人 主题发起人 吴其华
  • 开始时间 开始时间

吴其华

Unregistered / Unconfirmed
GUEST, unregistred user!
本人是这方面的新手,请给予详细解答
 
等待。。。。。。。
 
好象没有此类的转换吧,何不把word表格转换成Txt或者xls?
很多数据库都支持对此两种格式的import,export.
 
建议使用txt文件,delphi提供了以下函数
(1)function Length(S:String):Integer
(2)function Copy(S:String;Index,Count:Integer):String
(3)function Pos(Substr:String;S:String);Integer
(4)Procedure Delete(VarS:String;Index,Count:Inte?ger);
  利用Delphi提供的已有函数和过程基础上编制自己的三个函数,实现了纯文本格式资
料转入数据库功能。只要Delphi支持的数据库都可以支持。
  archive.txt中每行数据为一个字符串,字符串中每个被分割的数据为一个字段,分
割每个字段的字符为分割符,这里是空格,也可以是,、;、#等符号。具体思想
是:先将字符串进行调整,然后把串中每个字符同分割符比较,将不是分割符的字符追加
到MyStr串中,最后得到一个字段的内容。通过一个循环,就可以将一个字符串分
成几个字段。
  FunctionRegulate(aString,Sepchar:string):string
  //去掉多余的分割符,规范字符串
  FunctionGetSubStr(varsString:string;SepChar:String):String;
  //得到字符串中一个子串
  //因要改变参数aString的值,所以将它用var定义。
  FunctionGetSubStrNum(aString,SepChar:String):Integer;
  //计算一个字符串要被分割成几个字段。
  参数:aString是所需分割的一个字符串,SepChar是分割符。
有了上面三个函数,现在介绍一下具体的应用:
  1.首先建立一个窗体Forml,加入一个RichEditl(或Menol),一个按钮Buttonl和一
个Tablel,设置Tablel的属性:
  Tablell.DataBase=′c:/Archivs′
  Tablell.TableName=′Archive.dbf′
  2.分别加入以下程序:
  ConstSpace:=′′
  ProcedureTForml.FormCreate(Sender:Tobject);
  begin
  RichRditl.Lines.LoadFromFile(′Archive.txt′);
  end;
  ProcedureTForml.Button1Click(Sender:T object);
  var
  i,j:Integer;
  MyLine:String;
  begin
  with Tablel do
  begin
  Open;
  for i:=0 to RichEditl.Lines.Count-1 do
  begin
  MyLine:=RegulateStr(Richeditl.Lines[i],Space);
  for j:=1 to Num To ken(MyLIne,Space) do
  begin
  Append;
  fileds[j-1].aString:=GetSubSrt(MyLine,Space));
  post;
  end;
  end;
  end;
  end;
  然后就可以进行编译,运行看看。
 
to :xsslh
请问如果数据很多的话,你这样处理不是会很慢很慢吗?
你还有没有其它的方法,来提高处理速度
 
不是很慢,你试一试再说。
 
我有一建议,不知是否适合你:

把Word中的表格复制到Excel中,保存
再把数据转换工具导入数据库。

至于选择什么数据转换工具,你得告诉我你用的是什么数据库。
 
Procedure RepTabField(Mydoc:TWordDocument;TableName:string;TableNum:integer);//完成表数据的添加。
//Mydoc:word文档;TableName:数据库名;TableNum:word中表的序号。
var
i,j,k,tcol,trow,ArrayNum:integer; //ArrayNum:存储字段数组的号。
Mytable:Table;
EnArray:array [0..24] of string;
ccc:Row;
fType :TfieldType;
// TempQuery:Tquery;
afterrow,beforerow:OleVariant;
begin
ArrayNum:=-1;
for i:=0 to 1 do
if TableName=FieldsL.TableName then ArrayNum:=i;
if ArrayNum<0 then showmessage('提供的数据库中文名称有误,请查证。')
else begin
//取出Word表中指定的中文字段名称。
if TableNum>Mydoc.Tables.Count then showMessage('文档中表格的个数有误,请查证。')
else begin
Mytable:=Mydoc.range.Tables.Item(TableNum);
trow:=Mytable.Rows.Count;
tcol:=mytable.Columns.Count;

if trow<1 then showmessage('报表模板中的表'+inttostr(TableNum)+'定义的格式有误,请查证。')
else begin
for i:=0 to tcol do begin//从word的表中取字段的中文名称,并且根据字段列表进行比较。
for j:=0 to 24 do begin
if trim(Mytable.cell(1,i).range.text)=FieldsL[ArrayNum].FieldsList[j][0] then
EnArray:=FieldsL[ArrayNum].FieldsList[j][1];
if (j=24) and (trim(EnArray)='') then begin
EnArray:='';
showmessage(''''+Mytable.cell(1,i).range.text+''''+'在数据库中没有找到匹配字段,请查证。');
end;
end;//for
end;//for
 
http://antic_ant.delphibbs.com/main/AnalyzeDB.zip
http://antic_ant.delphibbs.com/main/AnalyzeSQL.zip
可以实现你的第二个要求
 
后退
顶部