AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Open Office Automation

Ein Thema von Steven2 · begonnen am 11. Jun 2007 · letzter Beitrag vom 12. Jun 2007
Antwort Antwort
Steven2

Registriert seit: 17. Nov 2006
94 Beiträge
 
Delphi 11 Alexandria
 
#1

Open Office Automation

  Alt 11. Jun 2007, 12:20
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
  Mit Zitat antworten Zitat
pmoegenb

Registriert seit: 24. Aug 2006
Ort: Aidlingen
155 Beiträge
 
Delphi XE6 Professional
 
#2

Re: Open Office Automation

  Alt 11. Jun 2007, 14:31
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.
Peter Mögenburg
Gruß

Peter
  Mit Zitat antworten Zitat
Steven2

Registriert seit: 17. Nov 2006
94 Beiträge
 
Delphi 11 Alexandria
 
#3

Re: Open Office Automation

  Alt 11. Jun 2007, 16:59
Hallo
 If vDoc.BookMarks.hasByName('test') = false then Was ist wenn ich keine Textmarke im Dokument habe und trotzdem Text einfügen will?

Gruss
Steven
  Mit Zitat antworten Zitat
Heffalump

Registriert seit: 3. Aug 2005
278 Beiträge
 
RAD-Studio 2009 Ent
 
#4

Re: Open Office Automation

  Alt 12. Jun 2007, 08:59
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
  Mit Zitat antworten Zitat
Steven2

Registriert seit: 17. Nov 2006
94 Beiträge
 
Delphi 11 Alexandria
 
#5

Re: Open Office Automation

  Alt 12. Jun 2007, 09:26
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
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 08:14 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz