我想在Delphi中嵌入LibreOffice的实例。我的主要目标是在即时将LibreOffice文档嵌入到MS办公室时获得类似于MS Office的结果。如果可能的话,我想使用TOLEConatiner来实现这一点。将LibreOffice的实例嵌入到应用程序中(使用TOLEContainer)
为了测试我写了一个程序与TOleContainer组件:
procedure TForm1.btn1Click(Sender: TObject);
begin
if OpenDialog.Execute then
if FileExists(OpenDialog.FileName) then
OleContainer.CreateObjectFromFile(OpenDialog.FileName, false)
end;
对于微软Office(打开的.docx文件),该作品已经没有问题。打开一个.odt文件,然后激活OLEContainer会产生一个空框架,显示或多或少没有任何内容,因此不可查看或编辑。
所以我试图找出更多关于LibreOffice,OLE和COM的信息。我发现,我可以使用面向对象的API来访问其功能,我首先需要创建的面向对象的ServiceManager的OLEOBJECT,然后创建一个桌面服务来创建文档,像这样:
Server := CreateOleObject('com.sun.star.ServiceManager');
Desktop := Server.CreateInstance('com.sun.star.frame.Desktop')
LoadParams := VarArrayCreate([0, 0], varVariant);
Param := Server.Bridge_GetStruct('com.sun.star.beans.PropertyValue');
Param.Name := 'Hidden';
Param.Value := True;
LoadParams[0] := Param;
Document := Desktop.LoadComponentFromURL('private:factory/swriter', '_default', 0, LoadParams);
我的问题是我没有看到如何将这与OLEContainer结合起来,以得到我的预期结果。我发现的例子(例如this one)无法帮助我,因为他们打开了LibreOffice的单独实例。我也向LibarOffice提供了一些服务,以便找到任何解决方案,但我很难完成文档。
OLE,COM和LibreOffice API对我来说是一个新话题,我觉得很遗憾。所以我想出了以下问题:
甚至可以显示和编辑OleContainer中嵌入的LibreOffice实例中的文档吗? 如果是,我该如何实现? 如果不是,那么在我的应用程序中是否有替代方案来显示LibreOffice实例?
你有任何证据证明这甚至有可能吗? –
如上所述,MSOffice已经使用了这个功能,并且它在那里工作(我希望MSOffice也使用TOleContainer)。但我无法找到有关如何完成的任何事情。 –
我没有看到办公室进入此处。你正在使用libre办公室。它可以被嵌入吗? –