如何把一个Word文档流直接加载到OleContainer中?

来源:互联网 发布:mysql count(0) 编辑:程序博客网 时间:2024/04/27 13:24

procedure LoadOleCtnrFromStream(OleContainer: TOleContainer; Stream: TStream);
const
  DataFormatCount
= 2;
  StreamSignature
= $434F4442; {'BDOC'}
type
  TStreamHeader
= record
   
case Integer of
     
0: ( { New }
        Signature: Integer;
        DrawAspect: Integer;
        DataSize: Integer);
     
1: ( { Old }
        PartRect: TSmallRect);
 
end;
var
  Header: TStreamHeader;
  Mem: TMemoryStream;
begin
  Mem:
= TMemoryStream.Create;
  try
    Header.Signature :
=  StreamSignature;
    Header.DrawAspect :
= 1;
    Mem.Write(Header, SizeOf(Header));
    Mem.CopyFrom(Stream,
0);
    Mem.Position :
= 0;
    OleContainer.LoadFromStream(Mem);
   
//OleContainer.DoVerb(0);//就可以通过OleContainer.OleObject得到Word文档对象
  finally
    Mem.Free;
 
end;
end;

//测试代码,当然你也可以通过从数据库的一字段取出Word文档然后放到一个流里传给LoadOleCtnrFromStream函数
procedure TForm1.Button4Click(Sender: TObject);
var
  fileStream: TFileStream;
begin
  fileStream :
= TFileStream.Create('D:/1.doc', fmOpenReadWrite);
  try
    LoadOleCtnrFromStream(OleContainer, fileStream);
  finally
    fileStream.Free;
 
end;
end;

原创粉丝点击