看来这个问题只能自己解决了。
现在把自己的做法拿出来希望各位大虾能批评指正:
BlobFld2OleSaveasdoc是我写的一个标准的blob字段通过olecontianer保存为.doc文件的方法。
//========begin保存为doc文件========//
Procedure BlobFld2OleSaveasdoc(var dataQuery:TQuery;fldName:String; Ole: TOleContainer);
var
OleStream:Tstream;
NameId: String;
begin
NameId := dataQuery.FieldByName('element_Id').asstring;
OleStream := dataQuery.CreateBlobStream(dataQuery.fieldbyName(fldName),bmRead);
if OleStream.Size >0 then
begin
OLE.LoadFromStream(OleStream);
Ole.SaveAsDocument(TempPath+NameId+'.doc');//TempPath 为.doc文件的路径
Ole.Close ;
OleStream.free;
end else
begin
Ole.CreateObject('word.document',false);
end;
end;
//========end保存为doc文件========//
FileListBox1.Directory := TempPath;
FileLIstbox1.Mask :='*.doc';
//Filelistbox1 用于取“.doc”文件
//========begin合并doc文件========//
TempFileName := extractfilepath(Application.ExeName)+'TempdocFile/Tempdoc.dot';
//tempdoc.dot用于存放合并的主文件
wordapplication1.Connect;
wordapplication1.Documents.Open(TempFileName,emptyparam,emptyparam,emptyparam,emptyparam,emptyparam,emptyparam,emptyparam,emptyparam,emptyparam);WordDocument1.ConnectTo(wordapplication1.Documents.Item(TempFileName));
WordDocument1.Select ;
WordDocument1.Range.Cut ;//清空.dot文件
for FileNameOrder := 0 to FileListBox1.Items.Count -1 do
begin
FromFileName := TempPath + FileListBox1.Items.Strings[FileNameOrder];
wordapplication1.Documents.Open(FromFileName,emptyparam,emptyparam,emptyparam,emptyparam,emptyparam,emptyparam,emptyparam,emptyparam,emptyparam);
WordDocument2.ConnectTo(wordapplication1.Documents.Item(FromFileName));
WordDocument2.Select ;
WordDocument2.Range.Copy;
WordDocument2.Close ;
WordDocument1.Paragraphs.Last.Range.Paste;
end;{for for FileNameOrder := 0 to FileListBox1.Items.Count -1}
Wordapplication1.Visible:=true;//结果显示。
//========end合并doc文件========//
这种方法的缺点是比较慢。而且占用系统资源比较多。
现在有几个问题想问问各位朋友们了
1.不知道能有更好的方法没有。? (200)
2.还有在olecontainer中能不能设置为只读属性。如果不通过身份
验证的话就不能进行编辑。但可以打开浏览。(50)
3.如何把word的所有菜单和按钮都false掉?(通过olecontianer实现。用webbrowser实现的不算)(50)