![]() |
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:
Bekomme nach dem schliessen meines Formulars folgende Fehlermeldung:
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; Zitat:
Wenn schon eine Textmarke im Dokument vorhanden ist reicht dieser Code:
Delphi-Quellcode:
Grüße
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; Steven |
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:
Richte dazu Dein Augenmerk auf den Codeschnipsel If Document.BookMarks.hasByName(name) = true then.
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; |
Re: Open Office Automation
Hallo
Delphi-Quellcode:
Was ist wenn ich keine Textmarke im Dokument habe und trotzdem Text einfügen will?
If vDoc.BookMarks.hasByName('test') = false then
Gruss Steven |
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 ![]() Vieleicht wäre das ein Alternative. MFG |
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