我想使用Delphi将两个word文档合并为一个。
在我的数据库中,我有一个表,其中包含一个包含varbinary(max)的表,该表包含一个Word文档,我想根据条件从该表的某些行创建一个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;
这就是我尝试过的。
答案 0 :(得分:3)
正如我在上一个问题中所说,Word BIFF8文件无法简单连接。您需要创建一个包含两个文档内容的新BIFF8文件。
使用Word自动化执行此操作。加载第一个文档。将选择移动到该文档的末尾。此时插入第二个文档。保存合并的文档。这是一个使用后期绑定COM的非常简单的例子:
uses
ComObj;
....
procedure CombineDocFiles(const input1, input2, output: string);
const
wdStory = $00000006;
var
Word, Document: OleVariant;
begin
Word := CreateOleObject('Word.Application');
Document := Word.Documents.Open(input1);
Word.Selection.EndKey(wdStory);
Word.Selection.InsertFile(input2);
Document.SaveAs(output);
Word.Quit;
end;
因为我使用了后期绑定的COM,所以我选择明确定义wdStory
。您可以选择使用Word2000
单位。如果你这样做,你也可以切换到早期绑定的COM,如果你愿意的话。
无论如何,我并不认为这个问题应该成为如何进行Word自动化的全面教训。这只是让你指向正确方向的首发。