私はアプリケーションにLibreOfficeのインスタンスをDelphiで埋め込もうとしています。私の主な目標は、LibreOfficeドキュメントをMSオフィスに埋め込むときにMSオフィスのような結果を達成することです。可能であれば、私はこれを達成するためにTOLEConatinerを使用したいと思います。テストのためにアプリケーションにLibreOfficeのインスタンスを埋め込む(TOLEContainerを使用)
私はTOleContainerコンポーネントでプログラムを書いた:MS Office用
procedure TForm1.btn1Click(Sender: TObject);
begin
if OpenDialog.Execute then
if FileExists(OpenDialog.FileName) then
OleContainer.CreateObjectFromFile(OpenDialog.FileName, false)
end;
を(.docxのファイルを開く)、これはすでに問題なく動作します。 .odtファイルを開いてOLEContainerをアクティブにすると、何も表示されないため、表示も編集もできない空のフレームが表示されます。
私はLibreOffice、OLE、COMについてもっと知ろうとしました。
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);
私の問題:私は、私は、私は最初、文書を作成し、デスクトップサービスを作成し、OO ServiceManagerのOLEObject変数を作成するには、このような何かを必要とするその機能にアクセスするためのオブジェクト指向のAPIを使用することができることを見出しました私はこれをOLEContainerと組み合わせて私の期待した結果を得る方法を見ていないということです。私が見つけた例(例えばthis one)は、LibreOfficeの別のインスタンスを開いているときにも私を助けませんでした。私はまた、LibreOfficeのいくつかのサービスについて何か解決策を見つけることを通知しましたが、ドキュメントを手に入れるのは非常に難しいです。
OLE、COM、およびLibreOffice APIは新しいトピックです。だから私は次の質問を出します:
OleContainerに埋め込まれたLibreOfficeインスタンスで文書を表示したり編集したりすることは可能ですか? はいの場合、どうすれば達成できますか? いいえ、私のアプリケーションにLibreOfficeインスタンスを表示するための選択肢がありますか?
これが可能であるという証拠はありますか? –
上記のように、MSOfficeはすでにこの機能を使用していますが、そこで動作します(MSOfficeでもTOleContainerが使用されることを期待しています)。しかし、私はそれがどのように行われたかについて何も見つけることができませんでした。 –
事務所がどこに来るのかわかりません。あなたはlibre officeを使用しています。埋め込むことはできますか? –