❤️ Helfen Sie noch heute, unser LibreOffice Forum zu erhalten! ❤️

❤️ HELFEN SIE JETZT >> << HELFEN SIE JETZT ❤️

>> Dank Ihrer Unterstützung -> Keine Werbung für alle registrierten LibreOffice-Forum User! <<
🤗 Als Dankeschön werden Sie im Forum als LO-SUPPORTER gekennzeichnet. 🤗


Rahmen und Beschriftung zu Grafik-Object finden

Alles zur Programmierung im LibreOffice.
Antworten
lessger
Beiträge: 249
Registriert: Fr 4. Mai 2012, 13:33

Rahmen und Beschriftung zu Grafik-Object finden

Beitrag von lessger » Fr 5. Sep 2014, 12:23

Ich versuche in LO Basic zu einem Grafik-Object die Beschriftung zu finden. Ein Grafik-Objectmit Beschriftung befindet sich ja in einem beides umgebenden Textrahmen. Der Code soll aber auch für Grafik-Objects funktionieren, die keinen Rahmen haben. Dann soll eben keine Beschriftung gefunden werden.

Meine Grafiken finde ich so:

Code: Alles auswählen

oDoc = StarDesktop.CurrentComponent
oGraphic = oDoc.getGraphicObjects.getbyIndex(i)

Code: Alles auswählen

oGraphic.getAnchor
führt mich dann zu einem übergeordneten Object, aber wie finde ich jetzt raus, daß dies ein Rahmen ist?

Es gibt da zwar die Property

Code: Alles auswählen

oGraphic.getAnchor.TextFrame
aber das führt zu einem Laufzeitfehler, wenn das Bild nicht innerhalb eines Frames ist. In MRI sehe ich, daß TextFrame dann void ist. Aber kann ich das in Basic ohne Fehler ermitteln?

Danke und Gruß
Gerhard
LibreOffice 5.4.6.2 / Windows 10 64Bit / WIndows 10 32Bit

Benutzeravatar
karolus
* LO-Experte *
Beiträge: 2604
Registriert: Fr 10. Dez 2010, 10:01

Re: Rahmen und Beschriftung zu Grafik-Object finden

Beitrag von karolus » Fr 5. Sep 2014, 14:21

Hallo

Code: Alles auswählen

def main():
    doc = desktop.CurrentComponent
    grafics = doc.GraphicObjects
    for pic in iterate(grafics):
        print(pic.Anchor.Text.String)
        
def iterate(enumerable_be):
    enumerable = enumerable_be.createEnumeration()
    while enumerable.hasMoreElements():
        yield enumerable.nextElement() 
Wenn das Bild keine Beschriftung hat, ist der String leer ""

Karolus
LO25.2.x.y debian 13(trixie) auf Raspberry5 8GB (64bit)
LO25.8.x.y flatpak debian 13(trixie) auf Raspberry5 8GB (64bit)

lessger
Beiträge: 249
Registriert: Fr 4. Mai 2012, 13:33

Re: Rahmen und Beschriftung zu Grafik-Object finden

Beitrag von lessger » Fr 5. Sep 2014, 16:35

Vielen Dank, Karolus,

funktioniert aber bei mir nicht ganz.

Wenn es ein Bild mit Beschriftung ist, bekomme ich so die Beschriftung (das ist gut). Wenn es aber ein Bild ist, das direkt an einem Absatz verankert ist (ohne Rahmen), dann bekomme ich den Text des Absatzes. Den kann ich aber nicht gebrauchen und auch nicht unterscheiden.

Hast Du noch eine Idee?

Grüße
Gerhard
LibreOffice 5.4.6.2 / Windows 10 64Bit / WIndows 10 32Bit

Benutzeravatar
karolus
* LO-Experte *
Beiträge: 2604
Registriert: Fr 10. Dez 2010, 10:01

Re: Rahmen und Beschriftung zu Grafik-Object finden

Beitrag von karolus » Fr 5. Sep 2014, 17:28

Hallo

Puh - irgendwie finde ich keine wirklich eindeutigen Unterscheidungsmerkmale, evtl. per
.Anchor.ParaStyleName Ein Bild mit Beschriftung bekommt im Normalfall die Absatzvorlage Illustration aber in der Praxis kann der Beschriftung auch irgendeine andere Absatzvorlage zugewiesen werden --

Karolus
LO25.2.x.y debian 13(trixie) auf Raspberry5 8GB (64bit)
LO25.8.x.y flatpak debian 13(trixie) auf Raspberry5 8GB (64bit)

lessger
Beiträge: 249
Registriert: Fr 4. Mai 2012, 13:33

Re: Rahmen und Beschriftung zu Grafik-Object finden

Beitrag von lessger » Fr 5. Sep 2014, 17:38

Hatte auch schon überlegt, den Style abzufragen, ist aber eben nicht zuverlässig.

Als Unterscheidung hatte ich zunächst getAnchor.TextFrame herangezogen. Laut MRI ist das void, wenn kein Frame um die Grafik ist. Andernfalls bringt es einen zum umgebenden Rahmen.

Das Problem ist aber, daß der Zugriff getAnchor.Textframe im ersten Falle zu einem Laufzeitfehler ("Objektvariable nicht belegt") führt. Zur Not könnte ich das ja mit On Error abfangen, aber das mache ich ungern, weil es so unspezifisch ist.

Gibt es irgendeinen Weg, zu prüfen ob ein bestimmtes Property existiert, ohne einen Laufzeitfehler auszulösen? Es müßte aber in Basic sein. Das ganze ist ein existierendes, großes Programm, das ich nicht komplett umschreiben kann.

Grüße
Gerhard
LibreOffice 5.4.6.2 / Windows 10 64Bit / WIndows 10 32Bit

Benutzeravatar
karolus
* LO-Experte *
Beiträge: 2604
Registriert: Fr 10. Dez 2010, 10:01

Re: Rahmen und Beschriftung zu Grafik-Object finden

Beitrag von karolus » Fr 5. Sep 2014, 17:55

Hallo

Ja dann nimm doch .Anchor.Textframe zur Identifizierung.

Code: Alles auswählen

def main():
    doc = desktop.CurrentComponent
    grafics = doc.GraphicObjects
    for pic in iterate(grafics):
        if pic.Anchor.TextFrame:
            print(pic.Anchor.Text.String) 
in Basic müsste das eine der folgenden sein:

Code: Alles auswählen

if not isEmpty(pic.Anchor.Textframe) then
oder

Code: Alles auswählen

if not isNull(pic.Anchor.Textframe) then
Karolus
LO25.2.x.y debian 13(trixie) auf Raspberry5 8GB (64bit)
LO25.8.x.y flatpak debian 13(trixie) auf Raspberry5 8GB (64bit)

lessger
Beiträge: 249
Registriert: Fr 4. Mai 2012, 13:33

Re: Rahmen und Beschriftung zu Grafik-Object finden

Beitrag von lessger » So 7. Sep 2014, 09:42

Danke Karolus,

Code: Alles auswählen

isEmpty(oAnchor.TextFrame)
funktioniert.

Grüße
Gerhard
LibreOffice 5.4.6.2 / Windows 10 64Bit / WIndows 10 32Bit


An alle, die das LibreOffice-Forum gern nutzen und unterstützen wollen:


Bitte helfen Sie uns mit 7 Euro pro Monat.
Durch Ihren Beitrag tragen Sie dazu bei, unsere laufenden Kosten für die kommenden Monate zu decken.
Unkompliziert per Kreditkarte oder PayPal.
Als ein kleines Dankeschön werden Sie im LO-Forum als SUPPORTER gekennzeichnet.



Antworten