Gelöst: Textdokument: Inhalt aus Bereich löschen

Programmierung unter AOO/LO (StarBasic, Python, Java, ...)

Moderator: Moderatoren

pdidi
*
Beiträge: 12
Registriert: Do, 17.04.2008 16:18

Gelöst: Textdokument: Inhalt aus Bereich löschen

Beitrag von pdidi »

Hallo,

jetzt muss ich mich doch noch mal hilfesuchend an euch wenden. Was ich auch gerne mache, da ihr mir bisher schon super geholfen habt. :D

Diesmal habe ich folgendes Problem:
Ich möchte von einem Programm aus (Lotus Notes) ein OpenOffice Dokument öffnen, einen bestimmten Bereich anspringen, den dort enthaltenen Inhalt löschen und anschließend neuen Inhalt an diese Stelle einfügen.

Mein OpenOffice Dokument ist dazu in einzelne Bereiche unterteilt, die ich auch namentlich ansprechen kann.

Code: Alles auswählen

textSection = OOoObjDok.TextSections.getByName(<MeinBereichsname>) 
Das Einfügen von neuem Inhalt funktioniert auch.

Code: Alles auswählen

textSectionCursor = OOoObjDok.Text.CreateTextCursorByRange (textSection.Anchor)
textSectionCursor.insertDocumentFromUrl (<DokumentMitNeuemInhalt>, args)


Jetzt fehlt nur noch das Markieren des Inhalts dieses Abschnitts und das Löschen des markierten Teils.
Meine bisherigen Versuche mit RemoveTextContent haben dazu geführt, dass nur der Bereich entfernt wurde, aber der Inhalt blieb erhalten.
Und über den Dispatcher Uno:Delete hatte ich auch keinen Erfolg (Fehler: automation object argument type mismatch).

So versuche ich zu markieren:

Code: Alles auswählen

' TextCursor in Bereich setzen
textSectionCursor = OOoObjDok.Text.CreateTextCursorByRange (textSection.Anchor)
' Bereich markieren
textSectionCursor.gotoEnd(True)
Das ist mein Versuch, den Inhalt über RemoveTextContent zu entfernen:

Code: Alles auswählen

OOoObjDok.Text.removeTextContent(textSection)
Und so sieht mein Versuch mit dem Dispatcher aus:

Code: Alles auswählen

OOoDispatcher = serviceManagerObj.createInstance("com.sun.star.frame.DispatchHelper") 
OOoDispatcher.executeDispatch(textSectionCursor, ".uno:Delete", "", 0, args)


args enthält jeweils eine Dummy-Werteliste (["Dummy!"], [0])

Vielen Dank im Voraus für eure Ideen!


Petra
Zuletzt geändert von pdidi am Di, 17.06.2008 20:03, insgesamt 1-mal geändert.
turtle47
*******
Beiträge: 1849
Registriert: Mi, 04.01.2006 20:10
Wohnort: Rheinbach

Re: Textdokument: Inhalt aus Bereich löschen

Beitrag von turtle47 »

Hi Petra,

mit folgendem Code wird im "Bereich1" der bestehende Text direkt durch den neuen Text ersetzt:

Code: Alles auswählen

Sub Bereich_Text_ersetzen
	oDocument = ThisComponent
	oDocSections = oDocument.TextSections
	mysection=oDocSections.getbyname("Bereich1")
	oAnchor= mysection.getAnchor
	oAnchor.setString("Mein  Text")
End Sub
Hilft das weiter?

Jürgen
Software hat keinen Verstand - benutze deinen eigenen...!

Win 7 SP1/ LibreOffice 3.4.2 OOO340m1 (Build:203) / Firefox 15.0.1 / Notebook ASUS K70IO 64 Bit-Betriebssytem
pdidi
*
Beiträge: 12
Registriert: Do, 17.04.2008 16:18

Re: Textdokument: Inhalt aus Bereich löschen

Beitrag von pdidi »

Hallo Jürgen,

danke für die schnelle Antwort. Ich probiere es morgen mal aus und melde mich dann wieder.

Viele Grüße,


Petra
pdidi
*
Beiträge: 12
Registriert: Do, 17.04.2008 16:18

Re: Textdokument: Inhalt aus Bereich löschen

Beitrag von pdidi »

Hallo Jürgen,

ich war doch zu neugierig und habe es noch ausprobiert.

Manchmal denke ich einfach viel zu umständlich. Das kommt vielleicht auch daher, dass ich einen Programmcode vorliegen habe, der für Microsoft Office funktionierte und den ich für OpenOffice umstricke.

Ich habe es jetzt wie folgt gelöst:

Code: Alles auswählen

' Textbereich ansprechen
textSection = OOoObjDok.TextSections.getByName(<MeinBereich>) 
' Cursor in Bereich setzen
textSectionCursor = OOoObjDok.Text.CreateTextCursorByRange (textSection.Anchor)
'Dokumentinhalt einfügen
Call textSectionCursor.insertDocumentFromUrl (<DokumentMitNeuemInhalt>, args)[[


Dadurch wird alles was im Bereich drin steht durch den Inhalt des zweiten Dokuments überschrieben.
Ich habe mich für InsertDocumentFromUrl entschieden, da der Inhalt samt Formatierungen (Tabellen, Textfelder, Textmarken) übernommen werden soll.

Vielen Dank,


Petra
Antworten