我们正在使用Delphi 7,SQL server 2008和MS word 2003.现在我们计划将MS word 2003迁移到MS word 2016.
在我们的应用程序中,我们将从数据库加载文档(BLOB字段)并将其保存到.tmp文件中,然后我们将使用Delphi7中的TOleContainer打开文档。
上面的过程对.doc工作正常,并且它不适用于.docx。我们能够通过以下示例复制问题
德尔福代码:
procedure TForm1.FormShow(Sender: TObject);
begin
WordOleContainer.AllowInPlace := True;
WordOleContainer.CreateObjectFromFile('F:\WordViewerTest\docx.tmp', False);
end;
当我们运行应用程序时,我们正在低于error.if我们点击打开文档是在另一个窗口打开,而不是在olecontainer。
如果我双击.tmp文件,它会打开而没有任何警告。 如果我使用上面的delphi代码,它会显示警告。如何使上面的代码工作?
答案 0 :(得分:0)
只要* .docx文件实际上是从二进制角度来看的* .zip文件,就无法区分OLE二进制模式类搜索机制(在GetClassFile中描述)这些文件类型之间的参考,确定策略的第2步。如果您为* .docx文件注册了二进制模式,您实际上会注册* .zip文件以供您选择的应用程序打开。从那时起,使用OleCreateFromFile的所有程序都会在您注册的应用程序中打开* .zip文件。
因此,要在系统中没有任何歧义的情况下解决您的问题,只需使用正确的* .docx扩展名保存文件,然后让OLE按文件扩展名查找类(确定策略的第3步)。