通过OLE在WORD中任意画表格。(200分)

  • 主题发起人 主题发起人 程云
  • 开始时间 开始时间
》》程云:我想一行行的添加这些表格,要如何作才好
在Delphi中使用VBA远程服务,速度会很慢,而且
非常不稳定!!想想是否使用 word时经常死机……
的确可以用宏录 VBA……不过,如果使用BLOB或Stream从数据库
中倒出,稳定、而且十分地快,可以选择选择用文件流、控件流
VBA远程服务在这里有一些作用。
 
不要一行行添加,要先算出总共需要多少行,一次画好,下面的语句用一个标签
指示表格要添加的位置,然后添加一个2行*5列的表格。
MyDoc.Tables.Add(MyDoc.Bookmarks.Item('表格3').Range,2,5)
另:前面所说的帮助文件名错了,应该是 Vbawrd8.hlp
 
如果使用vba远程服务的话:
以下的方法,可以达到事半功倍的作用
AppExecl.WorkSheets[1].Unprotect(msSheetName);
//锁保护不让别人修改
AppExecl.Application.ScreenUpdating := False ;
//不更新,使运行vba时快一些
AppExecl.CommandBars['Formatting'].Visible:=FALSE;
//工作toolsbar
//工作票信息
AppExecl.Range('G1') := EGZPBH.Text;//'编号:'
AppExecl.Range('C2') := EGZDWDM.Text;//'工作单位:';
AppExecl.CommandBars['Formatting'].Visible:=FALSE;
AppExecl.Application.CommandBars['Worksheet Menu Bar'].Visible := True ;
AppExecl.Application.ScreenUpdating := True ;
AppExecl.WorkSheets[1].Protect(msSheetName,FALSE,TRUE,TRUE);//netserver/zdmis/shengj/ddgl/ pDZFAGL.exe
//netserver/zdmis/shengj/ddgl/ pExecl2Blob.exe
 
如果使用vba远程服务的话:
以下的方法,可以达到事半功倍的作用
AppExecl.WorkSheets[1].Unprotect(msSheetName);
//锁保护不让别人修改
AppExecl.Application.ScreenUpdating := False ;
//不更新,使运行vba时快一些
AppExecl.CommandBars['Formatting'].Visible:=FALSE;
//工作toolsbar
//工作票信息
AppExecl.Range('G1') := EGZPBH.Text;//'编号:'
AppExecl.Range('C2') := EGZDWDM.Text;//'工作单位:';
AppExecl.CommandBars['Formatting'].Visible:=FALSE;
AppExecl.Application.CommandBars['Worksheet Menu Bar'].Visible := True ;
AppExecl.Application.ScreenUpdating := True ;
AppExecl.WorkSheets[1].Protect(msSheetName,FALSE,TRUE,TRUE);//netserver/zdmis/shengj/ddgl/ pDZFAGL.exe
//netserver/zdmis/shengj/ddgl/ pExecl2Blob.exe
 
实在对不起,这几天一真连不上来。

to hsw:
你给的"vba远程服务"方法很不错,能很大的提高速度。多谢了。
我还对你说的"使用BLOB或Stream从数据库中倒出"。
很感兴趣,能不能说的详细点,到底要如何作呢?
 
>>程云
以下一个是保存到数据库,一个是从数据库中调出
我使用的是 ORACLE数据库,XKRTXAQCS 的数据类型是 LONG ROW
我正在研究 远程调用,希望互相促进,如果还有什么问题,请 再联系,
因为很急,所以就没有好好改一下,好让你容易看懂一些,不过,依你
44名的水平,我觉得你一定会很快掌握的!
有什么问题,请提出,大家一起研究~
Function SaveOLEToBlobField(OleDDMLP:TOleContainer;
qryTemp:TQuery;sFieldName,sTempFileName,sSQl:String):Boolean;
VAR
Stream: TBlobField;
// smTemp:TMemorystream;
begin
Result := False ;
if((OleDDMLP.State=osEmpty)or(Not OleDDMLP.Modified))then
Exit ;
Stream:=TBlobField.Create(Application);
try
with qryTempdo
//保存数据
begin
Sql.Clear;
Sql.Add(sSQl);
Stream.FieldName:=sFieldName;
Stream.DataSet:=qryTemp;
RequestLive:=True;
try
Open;
EDIT;
OleDDMLP.SaveAsDocument(sTempFileName) ;
Stream.LoadFromFile(sTempFileName);
Post;
except
showmessage('对数据库操作'+Sql.text+'失败,将影响以后操作的正确性,请退出!');
exit;
end;
//End Try Except
Close;
Result := True ;
end;
finally
Stream.Free ;
end;
{ try
Stream:=TBlobField.Create(Application);//TMemorystream.Create;
smTemp:=TMemorystream.Create ;
with DM.Query1do
//保存数据
begin
Sql.Clear;
Sql.Add(Format('Select XKRTXAQCS From SJ_GZP_WH_GZPGLB Where GZPBH=''%s''',[EGZPBH.Text]));
Stream.FieldName:='XKRTXAQCS';
Stream.DataSet:=qryTemp;
RequestLive:=True;
try
Open;
EDIT;
OleDDMLP.SaveToStream(smTemp);
Stream.LoadFromStream(smTemp);
Post;
except
showmessage('对数据库操作'+Sql.text+'失败,将影响以后操作的正确性,请退出!');
exit;
end;
//End Try Except
Close;
end;
//End With
finally
Stream.Free ;
smTemp.Free ;
end;
//End Try Finanlly
}
end;
Function LoadBlobToOLE(OleDDMLP:TOleContainer;
qryTemp:TQuery;sFieldName,sTempFileName,sSQl:String):Boolean;
var
Stream: TBlobField;
// smTemp:TBlobStream;
begin
Result:= False;
Stream:=TBLOBFIELD.Create(APPLICATION);
try
with qryTempdo
begin
Close;
Sql.Clear;
Sql.Add(sSQl);
Stream.FieldName:=sFieldName;
Stream.DataSet:=qryTemp;
try
Open ;
except
end;
//Try Open
if (Stream.IsNull) then
begin
//从数据库中调票
ShowMessage('数据空');
Close ;
End else
begin
try
Stream.SaveToFile(sTempFileName);
OleDDMLP.CreateObjectFromFile(sTempFileName,False) ;
Close ;
Result:= True;
finally
end;
end;
//End if
End ;
// End With
finally
Stream.Free;
end;
{ try
Stream:=TBLOBFIELD.Create(APPLICATION);
with DM.Query1do
begin
Close;
Sql.Clear;
Sql.Add(Format('Select XKRTXAQCS From SJ_GZP_WH_GZPGLB Where GZPBH=''%s''',[EGZPBH.Text]));
Stream.FieldName:='XKRTXAQCS';
Stream.DataSet:=Dm.Query1;
try
Open ;
except
end;
//Try Open
if (Stream.IsNull) then
begin
ShowMessage('数据空');
Close ;
End else
begin
try
smTemp:=TBlobStream.Create(Stream, bmRead);
smTemp.Seek(0,sofrombegin
ning);
OleDDMLP.LoadFromStream(smTemp) ;
//OleDDMLP.
//mIsTemplet := True ;
Finally
//mIsTemplet:= False ;
smTemp.Free ;
end;
//End Try Finally
Close ;
end;
//End if
End ;
// End With
finally
Stream.Free
end;
//End Finally
}
end;
 
to hsw:
程序看了,感谢!感谢!回去好好研究研究。
希望还能看的懂,我哪点明次是灌水得来的,让你见笑了。
这个问题结束了,感谢各位的回答,
由其是hsw大侠。
再次感谢hsw给的正确答案
hsw 100分
还有四位也给出了正确答案一并谢了,分数少了点,多多担待。
Crab 20
Dick 20
elan 20
windwy 15

有五位来灌水的同志,感谢你们的参于,只有5分,不成敬意。
小刚 5
only you 5
Jams 5
K 5
menxin 5
 
多人接受答案了。
 
呵呵,VBA不熟,可以去找OFFICE的HELP,很全的,这问题可不值这么多分,50足够了。
 
to menxin:
>VBA不熟,可以去找OFFICE的HELP
看的头混,帮助讲的太差了,一点系统性都没有。

>这问题可不值这么多分,50足够了
这人问题200分很值的,你会你自认不值了。
可你即会为何不帮我,太不够意思了。
 
后退
顶部