【发布时间】:2016-07-01 18:34:20
【问题描述】:
我想使用 Delphi 将两个 word 文档合二为一。
在我的数据库中,我有一个表,其中包含一个包含 Word 文档的 varbinary(max) 表,我想根据条件从该表的某些行创建一个 Word 文档。
我尝试过使用流
有什么想法可以实现吗?我一直在寻找,但没有找到解决方案。
var
i: Int32;
stream: TFileStream;
Path1: string;
WordApp: TWordApplication;
begin
Path1 := IncludeTrailingPathDelimiter(GetEnvironmentVariable('TEMP')) +
FormatDateTime('yyyymmddhhnnssz', Now) + '.doc';
WordApp := TWordApplication.Create(nil);
stream := TFileStream.Create(Path1, fmCreate);
try
try
with dm do
begin
DataSet.First;
CopyBlobFieldToStream(dm.DataSet,
dm.DataSetBlobField, stream);
ShowMessage(IntToStr(stream.Size));
DataSet.Next;
CopyBlobFieldToStream(dm.DataSet,
dm.DataSetBlobField, stream);
ShowMessage(IntToStr(stream.Size));
CopyBlobFieldToStream(dm.DataSet2,
dm.DataSet2BlobField, stream);
ShowMessage(IntToStr(stream.Size));
end;
finally
stream.Free;
end;
WordApp.Documents.Open(Path1, EmptyParam, False, EmptyParam, EmptyParam,
EmptyParam, EmptyParam, EmptyParam, EmptyParam, EmptyParam, EmptyParam,
EmptyParam, EmptyParam, EmptyParam, EmptyParam, EmptyParam);
WordApp.Visible := True;
finally
WordApp.Free;
end;
这是我尝试过的。
【问题讨论】:
-
顺便说一句,但为什么要使用
with dm,然后在大多数封闭字段中添加dm.?从长远来看,删除with会更干净、更安全。 -
@DavidA 它仍在调试中,我已经尝试了各种代码行,这就是为什么会这样,当我有一个可行的解决方案时我会重构它。
-
我认为你不能这样做。您应该单独保存文档,分别用Delphi打开这些文件并将一个内容复制到另一个内容。看看这里stackoverflow.com/questions/5393368/…
-
我认为您认为连接流等同于连接它们包含的 Word 文档的假设是错误的。它不是 - Word 文档是一个容器。