TOleContainer打开.tmp(word2016)文档Delphi7

时间:2018-02-08 05:59:28

标签: delphi delphi-7

我们正在使用Delphi 7,SQL server 2008和MS word 2003.现在我们计划将MS word 2003迁移到MS word 2016.

在我们的应用程序中,我们将从数据库加载文档(BLOB字段)并将其保存到.tmp文件中,然后我们将使用Delphi7中的TOleContainer打开文档。

上面的过程对.doc工作正常,并且它不适用于.docx。我们能够通过以下示例复制问题

  1. 创建.docx文件
  2. 打开.docx文件并输入一些文字并保存并关闭
  3. 将.docx重命名为.tmp
  4. 使用TOleContainer(Delphi代码下面)
  5. 打开.tmp文件

    德尔福代码:

    procedure TForm1.FormShow(Sender: TObject);
    begin
      WordOleContainer.AllowInPlace := True;
      WordOleContainer.CreateObjectFromFile('F:\WordViewerTest\docx.tmp', False);
    end;
    

    当我们运行应用程序时,我们正在低于error.if我们点击打开文档是在另一个窗口打开,而不是在olecontainer。 enter image description here

    如果我双击.tmp文件,它会打开而没有任何警告。 如果我使用上面的delphi代码,它会显示警告。如何使上面的代码工作?

1 个答案:

答案 0 :(得分:0)

只要* .docx文件实际上是从二进制角度来看的* .zip文件,就无法区分OLE二进制模式类搜索机制(在GetClassFile中描述)这些文件类型之间的参考,确定策略的第2步。如果您为* .docx文件注册了二进制模式,您实际上会注册* .zip文件以供您选择的应用程序打开。从那时起,使用OleCreateFromFile的所有程序都会在您注册的应用程序中打开* .zip文件。

因此,要在系统中没有任何歧义的情况下解决您的问题,只需使用正确的* .docx扩展名保存文件,然后让OLE按文件扩展名查找类(确定策略的第3步)。