Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Open Office Automation (https://www.delphipraxis.net/93784-open-office-automation.html)

Steven2 11. Jun 2007 12:20


Open Office Automation
 
Ich versuche Text in ein Open Office Writer Dokument einzufügen.
Ich dachte mir, dass ich dazu erst eine Textmarke einfügen muss um dann an dieser Stelle meinen Text einzufügen.
Aber es klappt nicht, sieht jemand meinen Fehler?
Oder funktioniert das einfügen von Textmarken nur über Makros?


Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
var vSvcMgr, vDesktop, vEmptyParam, vDoc, vBookmark, vTextCursor:OleVariant;
    sFileName:string;
begin
  vEmptyParam:=VarArrayCreate([0, -1], varVariant);
  vSvcMgr:=CreateOleObject('com.sun.star.ServiceManager');
  vDesktop:=vSvcMgr.createInstance('com.sun.star.frame.Desktop');
  if OpenDialog1.Execute then
  begin
    sFileName:=KonvFileName(OpenDialog1.FileName);
    vDoc:=vDesktop.LoadComponentFromURL(sFileName,'_blank',0, vEmptyParam);

    vBookmark := VDoc.createInstance('com.sun.star.text.Bookmark');
vBookmark.Name := 'test';
VDoc.Text.insertTextContent(vTextCursor, vBookmark, True);

    vBookMark:=vDoc.Bookmarks.getByName('test');
    vTextCursor:=vBookMark.Anchor.Text.createTextCursorByRange(vBookmark.Anchor);
    vTextCursor.SetString('Hallo OpenOffice!'#$A'Hier spricht Delphi...');
  end;
end;
Bekomme nach dem schliessen meines Formulars folgende Fehlermeldung:
Zitat:

---------------------------
Oo
---------------------------
InterfaceOleWrapper_Impl::Invoke :
[automation bridge]UnoConversionUtilities<T>::createOleObjectWrapper
The VARIANT does not contain an object type!
---------------------------
OK
---------------------------

Wenn schon eine Textmarke im Dokument vorhanden ist reicht dieser Code:

Delphi-Quellcode:
procedure TForm1.btnTextmarkenClick(Sender: TObject);
var vSvcMgr, vDesktop, vEmptyParam, vDoc, vBookmark, vTextCursor:OleVariant;
    sFileName:string;
begin
  vEmptyParam:=VarArrayCreate([0, -1], varVariant);
  vSvcMgr:=CreateOleObject('com.sun.star.ServiceManager');
  vDesktop:=vSvcMgr.createInstance('com.sun.star.frame.Desktop');
  if OpenDialog1.Execute then
  begin
    sFileName:=KonvFileName(OpenDialog1.FileName);
    vDoc:=vDesktop.LoadComponentFromURL(sFileName,'_blank',0, vEmptyParam);
    vBookMark:=vDoc.Bookmarks.getByName('test');
    vTextCursor:=vBookMark.Anchor.Text.createTextCursorByRange(vBookmark.Anchor);
    vTextCursor.SetString('Hallo OpenOffice!'#$A'Hier spricht Delphi...');
  end;
end;
Grüße
Steven

pmoegenb 11. Jun 2007 14:31

Re: Open Office Automation
 
Hallo Steven,

heißt das, dass der Code problemlos durchläuft wenn eine Textmarke vorhanden ist ? In diesem Fall müsstest Du abfragen, ob die Textmarke im Dokument vorhanden ist.

Beispiel:
Delphi-Quellcode:
function TOLE_OpenOffice.TxTBookmark(name,inhalt:String):boolean;
var
   VBookMark, vTextCursor: OleVariant;
begin
     Result := true;
     If Document.BookMarks.hasByName(name) = true then
        begin
        try
        vBookMark := Document.BookMarks.getByName(name);
        vTextCursor := vBookMark.Anchor.Text.createTextCursorByRange(vBookMark.Anchor);
        vTextCursor.SetString(inhalt);
        except
        Result := false;
        end;
        end;
end;
Richte dazu Dein Augenmerk auf den Codeschnipsel If Document.BookMarks.hasByName(name) = true then.

Steven2 11. Jun 2007 16:59

Re: Open Office Automation
 
Hallo
Delphi-Quellcode:
 If vDoc.BookMarks.hasByName('test') = false then
Was ist wenn ich keine Textmarke im Dokument habe und trotzdem Text einfügen will?

Gruss
Steven

Heffalump 12. Jun 2007 08:59

Re: Open Office Automation
 
Hallo Steven,

die Schnittstelle zu OpenOffice ist eine, wenn man sie z. Bsp. mit der von MS Office vergleicht, "anspruchsvolle". Habe mich auch mit dem Thema eine ganze Weile damit beschäftigt und es dann sein gelassen.

Jedoch gibt es mittlerweile das standardisierte Open Document Format und OpenOffice ist ja auch eines von vielen Office Anwendungen, die diese Format verarbeiten können. Genau an dieser Stelle habe ich etwas interessantes gefunden. Ist zwar für .Net und kostet etwas Lizenzgebühren (Entwicklerlizenz), funktioniert dafür aber auch mit mono unter Linux. Die Bibliothek erlaubt einem Anwendungen zu schreiben, welche Dokument im odf Format erstellen und/oder bearbeiten kann, ohne das eine entsprechende Officeinstallation vorhanden ist.

Vieleicht wäre das ein Alternative.

MFG

Steven2 12. Jun 2007 09:26

Re: Open Office Automation
 
Hallo Heffalump,

das ist eine interessante Komponente, ist leider für das was ich vorhabe etwas zu teuer.

Hast du auch mit Text einfügen experimentiert, bist du zu einem Ergebniss gekommen?

Ich will wirklich nur einen Text in das Dokument einfügen ohne das sich in dem Dokument eine Textmarke befindet.
Open Office muss halt installiert sein, fertig Abfahrt.
Oder eine textmarke setzen und dann meinen Text an der Stelle einfügen.
Danke aber für deine Hilfe.
Beste Grüsse
Steven


Alle Zeitangaben in WEZ +1. Es ist jetzt 10:33 Uhr.

Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz