使用Delphi连接两个Word文档

时间:2016-01-22 07:21:45

标签: delphi ms-word

我想使用Delphi将两个word文档合并为一个。

在我的数据库中,我有一个表,其中包含一个包含varbinary(max)的表,该表包含一个Word文档,我想根据条件从该表的某些行创建一个word文档。

我尝试过使用流

请参阅:Concatenate TStringStream

任何想法我怎样才能做到这一点?我一直在搜索,但没有找到解决方案。

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;

这就是我尝试过的。

1 个答案:

答案 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自动化的全面教训。这只是让你指向正确方向的首发。