BITTE helfen Sie uns HEUTE mit einer SPENDE
Helfen Sie das LibreOffice Forum zu erhalten!
> KEINE WERBUNG FÜR REGISTRIERTE BENUTZER!<
Ihre Spende wird für die Deckung der laufenden Kosten sowie den Erhalt und Ausbau 🌱 des LibreOffice Forums verwendet.
🤗 Als Dankeschön werden Sie im Forum als LO-SUPPORTER gekennzeichnet. 🤗
Programmierung in Calc
Programmierung in Calc
Liebe Leute,
derzeit möchte ich eigentlich gerne mittels Makro auf ein Linienobjekt zugreifen, um dies zu rotieren.
Allerdings bin ich verzweifelt am Suchen nach Infos zum Objektmodell in Calc. Ich habe zwar einige Beispiel gefunden, wie man irgendwas in Zellen reinschreibt etc., aber ich finde nichts dazu, wie ich auf z.B. ein Zeichnungsobjekt zugreifen kann.
Da diese "Mini-IDE" keinerlei IntelliSense hat wie ich es z.B. von Visual Studio gewohnt bin, habe ich keine Ahnung, welche Eigenschaften oder Methoden welche Objekte jeweils haben....
Kann mir da jemand weiterhelfen?
derzeit möchte ich eigentlich gerne mittels Makro auf ein Linienobjekt zugreifen, um dies zu rotieren.
Allerdings bin ich verzweifelt am Suchen nach Infos zum Objektmodell in Calc. Ich habe zwar einige Beispiel gefunden, wie man irgendwas in Zellen reinschreibt etc., aber ich finde nichts dazu, wie ich auf z.B. ein Zeichnungsobjekt zugreifen kann.
Da diese "Mini-IDE" keinerlei IntelliSense hat wie ich es z.B. von Visual Studio gewohnt bin, habe ich keine Ahnung, welche Eigenschaften oder Methoden welche Objekte jeweils haben....
Kann mir da jemand weiterhelfen?
Liebe Grüße
Uwe Homm
http://www.uwehomm.de
Uwe Homm
http://www.uwehomm.de
Re: Programmierung in Calc
Hallo Uwe,
Bei Bildern und Zeichnungsobjekten musst Du auf die Drawpage/s zu greifen.
Einfach gesagt handelt es sich um eine unsichtbare Ebene über dem Tabellenblatt.
Drawpage.getByIndex(0)
Der Index = 0 ist das eigentliche Objekt.
Statt einer Intellisense nutze ich z.B.:
Code: Alles auswählen
REM ***** BASIC *****
Sub Main
Dim oDoc As Object
oDoc=ThisComponent
' Linie drehen
' Maßeinheit: 1 = 1/100 Grad = 0,01 Grad
oDoc.Sheets.getByIndex(0).Drawpage.getByIndex(0).RotateAngle=9000 ' 9000/100 = 90 Grad
End Sub
Einfach gesagt handelt es sich um eine unsichtbare Ebene über dem Tabellenblatt.
Drawpage.getByIndex(0)
Der Index = 0 ist das eigentliche Objekt.
Statt einer Intellisense nutze ich z.B.:
- XRAY-Tool
Lade Dir das deutschsprachige Dokument von der angegebenen Seite herunter und öffne es in Writer.
Dort findest Du einen Button zur INstallation des Tools. BItte beachte auf jedenfall die nachfolgenden Seiten,
denn dort wird beschrieben, wie Xray bei jedem Office-Start mit geladen wird.
Es kostet ein wenig Einarbeitungszeit, ist aber mehr als nützlich.
Gleiches gilt für MRI. - MRI dient auch der Codeinspektion. Leider wird es für LibreOffice nicht mehr weiterentwickelt.
MRI - UNO Object Inspection Tool-1.3.3
Gruß
Craig
Nie die Sicherungskopie vergessen!
════════════════════════════════════════════════
WIN 10 Pro 64-Bit • LO 7.4.5.1 (x64) • AOO 4.1.8
Craig
Nie die Sicherungskopie vergessen!
════════════════════════════════════════════════
WIN 10 Pro 64-Bit • LO 7.4.5.1 (x64) • AOO 4.1.8
Re: Programmierung in Calc
Hallo craig,
herzlichen Dank erstmal! Deinen Hinweise werde ich nachgehen und mir das Tool mal ansehen.
Und Deinen Beispielcode probiere ich
Das mit der DrawPage hatte ich mittlerweile auch herausgefunden, aber wie ich dann auf die Objekte komme und wie deren Properties heißen...ohne Unterlagen keine Chance...
Meine Linien haben Namen, daher wird das wohl auch mit "getByName("Pfeil_U")" funktionieren.
Nochmals Danke!
herzlichen Dank erstmal! Deinen Hinweise werde ich nachgehen und mir das Tool mal ansehen.
Und Deinen Beispielcode probiere ich
Das mit der DrawPage hatte ich mittlerweile auch herausgefunden, aber wie ich dann auf die Objekte komme und wie deren Properties heißen...ohne Unterlagen keine Chance...
Meine Linien haben Namen, daher wird das wohl auch mit "getByName("Pfeil_U")" funktionieren.
Nochmals Danke!
Liebe Grüße
Uwe Homm
http://www.uwehomm.de
Uwe Homm
http://www.uwehomm.de
Re: Programmierung in Calc
Hallo Uwe,
LibreOffice-API: Drawpage
OpenOffice-API: Drawpage
Kannst übrigens beide Tools parallel installieren.
Nachfolgende Datei habe ich aus MRI heraus exportiert.
Der Aufruf im Code sieht so aus:
Man muss eine Schleife über die Indizes bilden und darin die Namen abfragen:
LibreOffice-API: Drawpage
OpenOffice-API: Drawpage
Ist eigentlich ein muss, denn mal ansehen, weil die oben verlinken API-Seiten einen in den Wahsinn treiben können.Uwe hat geschrieben:mir das Tool mal ansehen.
Kannst übrigens beide Tools parallel installieren.
Nachfolgende Datei habe ich aus MRI heraus exportiert.
Der Aufruf im Code sieht so aus:
Code: Alles auswählen
mri oDoc.Sheets.getByIndex(0).Drawpage
Leider bietet Drawpage keine getByName-Methode (siehe Calc-Datei → Tabelle: Methods).Uwe hat geschrieben:Meine Linien haben Namen, daher wird das wohl auch mit "getByName("Pfeil_U")" funktionieren.
Man muss eine Schleife über die Indizes bilden und darin die Namen abfragen:
Code: Alles auswählen
Dim oDP as Object
oDP=oDoc.Sheets.getByIndex(0).Drawpage
For i = 0 to 5
oDP.getByIndex(i)
If oDP.getByIndex(i).Name = "Banane" Then
' Linie drehen
' Maßeinheit: 1 = 1/100 Grad = 0,01 Grad
oDP.getByIndex(i).RotateAngle=9000 ' 9000/100 = 90 Grad
end If
next i
Gruß
Craig
Nie die Sicherungskopie vergessen!
════════════════════════════════════════════════
WIN 10 Pro 64-Bit • LO 7.4.5.1 (x64) • AOO 4.1.8
Craig
Nie die Sicherungskopie vergessen!
════════════════════════════════════════════════
WIN 10 Pro 64-Bit • LO 7.4.5.1 (x64) • AOO 4.1.8
Re: Programmierung in Calc
Lieber craig
wow...danke für die zahlreichen Infos!
Ja, das mit getByName hatte ich gestern spät noch getestet...und leider auch feststellen müssen, dass dies nicht funktioniert
Jetzt werde ich mich mal mit Deinen neuen Infos beschäftigen
wow...danke für die zahlreichen Infos!
Ja, das mit getByName hatte ich gestern spät noch getestet...und leider auch feststellen müssen, dass dies nicht funktioniert
Jetzt werde ich mich mal mit Deinen neuen Infos beschäftigen
Liebe Grüße
Uwe Homm
http://www.uwehomm.de
Uwe Homm
http://www.uwehomm.de
Re: Programmierung in Calc
Noch eine Ergänzung: Eigentlich verwende ich bei Sammlungen ja die foreach...aber DrawPage hat wohl auch keinen Container für die Zeichnungsobjekte...
Liebe Grüße
Uwe Homm
http://www.uwehomm.de
Uwe Homm
http://www.uwehomm.de
Re: Programmierung in Calc
Hi craig,
mit einer Sache komme ich derzeit nicht klar...und zwar mit der Einstellung bei Xray für den Ort des API.
Ich habe mir das aktuelle SDK heruntergeladen und installiert. Ich finde aber NICHT das richtige Verzeichnis, dass ich für das lokal installierte API eintragen muss...habe zwar verschiedene Verzeichnisse probiert, aber bisher kein Erfolg
Und bei der Einrichtung des Web-API habe ich die URL https://api.libreoffice.org/docs/idl/ref/index.html probiert, die aber auch nicht die Richtige ist...
Kannst Du mir bitte hier nochmal auf die Sprünge helfen?
Ansonsten ist Xray schonmal sehr informativ
Momentan suche ich das richtige Property, dass mir den Drehpunkt vor der Drehung festlegt. Ich will nicht um die Mitte der Linie drehen, sondern um den Anfangspunkt der Linie. Ich vermute mal, dass dies eine Enumeration ist, aber bisher habe ich bei den Eigenschaften noch nichts zielführendes gefunden. Daher wäre die API-Beschreibung bestimmt hilfreich
mit einer Sache komme ich derzeit nicht klar...und zwar mit der Einstellung bei Xray für den Ort des API.
Ich habe mir das aktuelle SDK heruntergeladen und installiert. Ich finde aber NICHT das richtige Verzeichnis, dass ich für das lokal installierte API eintragen muss...habe zwar verschiedene Verzeichnisse probiert, aber bisher kein Erfolg
Und bei der Einrichtung des Web-API habe ich die URL https://api.libreoffice.org/docs/idl/ref/index.html probiert, die aber auch nicht die Richtige ist...
Kannst Du mir bitte hier nochmal auf die Sprünge helfen?
Ansonsten ist Xray schonmal sehr informativ
Momentan suche ich das richtige Property, dass mir den Drehpunkt vor der Drehung festlegt. Ich will nicht um die Mitte der Linie drehen, sondern um den Anfangspunkt der Linie. Ich vermute mal, dass dies eine Enumeration ist, aber bisher habe ich bei den Eigenschaften noch nichts zielführendes gefunden. Daher wäre die API-Beschreibung bestimmt hilfreich
Liebe Grüße
Uwe Homm
http://www.uwehomm.de
Uwe Homm
http://www.uwehomm.de
Re: Programmierung in Calc
Also der Drehpunkt ist doch eine Koordinate...vielleicht mit dem Datentyp Point...mal weiterforschen
Liebe Grüße
Uwe Homm
http://www.uwehomm.de
Uwe Homm
http://www.uwehomm.de
Re: Programmierung in Calc
Hallo Uwe,
LibreOffice nutzt im Gegensatz zu AOO die Plattform "Generated by doxygen 1.8.18 " und damit kommt Xray wohl nicht klar.
Xray verlangt diese Seite:
http://www.openoffice.org/api/docs/comm ... dex-1.html
Beginnend mit dem Link "A"
Die LibreOffice -API beginnt hiermit:
https://api.libreoffice.org/docs/idl/ref/files.html
In MRI kann man diese Seite einstellen, wichtig ist, dass ein Haken bei "IDL reference..." gesetzt ist: Die SDK muss übrigens nicht installiert sein. Es muss auch keine permantente Internetverbindung vorhanden sein.
Die Angabe der Doku-Seite in den Einstellungen dient wohl nur der Aktualisierung, wenn eine Internetverbindung erkannt wird.
Daraus resultiert für LibreOffice:
Noch ein Hinweis:
Die AOO- und LibreOffice-API's bewegen sich nach und nach auseinander. Es gibt Fälle in denen
eine Anweisung in LibreOffice funktioniert, in AOO nicht und umgekehrt.
Dies hat selbstverständlich auch Auswirkungen auf die beiden Inspektions-Tools (XRAY und MRI).
Im Augenblick ist dies eher die Ausnahme, als die Regel.
Wollen mal sehen wo die Reise hingeht
Seite 560ff: Einfache Linien
Wenn ich es richtig verstanden habe, dann betrachtet man eine Linie als offenes Polygon.
Die Koordinaten-Daten werden dem Polygon als Array übergeben, usw.
------------------------------------------------
Die Eigenschaft Count liefert die Anzahl der Objekte auf der Drawpage.
Mit Indexgreift man auf die einzelnen Objekte zu.
Man kann auch mit hasmoreElements [TREU | FALSE] herausfinden, ob überhaupt Objekte vorhanden sind.
Das Problem ist, dass Xray eigentlich für AOO konzipiert ist und hier ist die API anders aufgebaut.Uwe hat geschrieben: mit einer Sache komme ich derzeit nicht klar...und zwar mit der Einstellung bei Xray für den Ort des API.
LibreOffice nutzt im Gegensatz zu AOO die Plattform "Generated by doxygen 1.8.18 " und damit kommt Xray wohl nicht klar.
Xray verlangt diese Seite:
http://www.openoffice.org/api/docs/comm ... dex-1.html
Beginnend mit dem Link "A"
Die LibreOffice -API beginnt hiermit:
https://api.libreoffice.org/docs/idl/ref/files.html
In MRI kann man diese Seite einstellen, wichtig ist, dass ein Haken bei "IDL reference..." gesetzt ist: Die SDK muss übrigens nicht installiert sein. Es muss auch keine permantente Internetverbindung vorhanden sein.
Die Angabe der Doku-Seite in den Einstellungen dient wohl nur der Aktualisierung, wenn eine Internetverbindung erkannt wird.
Daraus resultiert für LibreOffice:
- Nutze Xray unter Angabe der AOO-API
- Nutze MRI wie im Screenshot zu sehen.
Noch ein Hinweis:
Die AOO- und LibreOffice-API's bewegen sich nach und nach auseinander. Es gibt Fälle in denen
eine Anweisung in LibreOffice funktioniert, in AOO nicht und umgekehrt.
Dies hat selbstverständlich auch Auswirkungen auf die beiden Inspektions-Tools (XRAY und MRI).
Im Augenblick ist dies eher die Ausnahme, als die Regel.
Wollen mal sehen wo die Reise hingeht
Hier noch ein paar nützliche Links:Uwe hat geschrieben:Ansonsten ist Xray schonmal sehr informativ
- Andrew Pitonyak ist Autor diverser Bücher
www.pitonyak.org - Volker Lenhardt hat Andrews Buch OOME... ins deutsche übersetzt:
https://www.uni-due.de/~abi070/count.ph ... eutsch.pdf - Dannenhöfer: Viele Basic-Beispiele
http://www.starbasicfaq.de/index.html - Hiernoch ein Buch von Oracle, ist zwar schon ein wenig betagt, aber hilfreich:
https://docs.oracle.com/cd/E19064-01/so ... 7-3924.pdf
Ich selbst so etwas noch nicht programmiert. Bin aber im OOME... fündig geworden:Uwe hat geschrieben:Momentan suche ich das richtige Property, dass mir den Drehpunkt vor der Drehung festlegt. Ich will nicht um die Mitte der Linie drehen, sondern um den Anfangspunkt der Linie. Ich vermute mal, dass dies eine Enumeration ist, aber bisher habe ich bei den Eigenschaften noch nichts zielführendes gefunden. Daher wäre die API-Beschreibung bestimmt hilfreich
Seite 560ff: Einfache Linien
Wenn ich es richtig verstanden habe, dann betrachtet man eine Linie als offenes Polygon.
Die Koordinaten-Daten werden dem Polygon als Array übergeben, usw.
------------------------------------------------
Im Prinzip ist die Drawpage Ebene und Container:Uwe hat geschrieben:Eigentlich verwende ich bei Sammlungen ja die foreach...aber DrawPage hat wohl auch keinen Container für die Zeichnungsobjekte...
Die Eigenschaft Count liefert die Anzahl der Objekte auf der Drawpage.
Mit Indexgreift man auf die einzelnen Objekte zu.
Man kann auch mit hasmoreElements [TREU | FALSE] herausfinden, ob überhaupt Objekte vorhanden sind.
- nutze die Eigenschaft:
ODER
Code: Alles auswählen
nCounter=Drawpage.Count
die Methode:Damit hast Du die Anzahl der Zeichnungsobjekte in nCounter stehen.Code: Alles auswählen
nCounter=Drawpage.getCount
Aber Achtung: Die Zählung der Objekte beginnt bei 0
Deshalb -1:Code: Alles auswählen
For i = 0 to nCounter -1
Gruß
Craig
Nie die Sicherungskopie vergessen!
════════════════════════════════════════════════
WIN 10 Pro 64-Bit • LO 7.4.5.1 (x64) • AOO 4.1.8
Craig
Nie die Sicherungskopie vergessen!
════════════════════════════════════════════════
WIN 10 Pro 64-Bit • LO 7.4.5.1 (x64) • AOO 4.1.8
An alle, die das LibreOffice-Forum nutzen:
Bitte beteiligen Sie sich mit 7 Euro pro Monat und helfen uns bei unserem Budget für das Jahr 2024.
Einfach per Kreditkarte oder PayPal.
Als Dankeschön werden Sie im Forum als LO-SUPPORTER gekennzeichnet.
❤️ Vielen lieben Dank für Ihre Unterstützung ❤️