BITTE helfen Sie uns HEUTE mit einer SPENDE
Helfen Sie das LibreOffice Forum zu erhalten!

❤️ DANKE >><< DANKE ❤️

> 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. 🤗

Erklärunf für Sort Parameter

Alles zur Programmierung im LibreOffice.
Verstancla
Beiträge: 13
Registriert: Fr 21. Jan 2022, 10:58

Erklärunf für Sort Parameter

Beitrag von Verstancla » Sa 5. Feb 2022, 13:19

Hallo
Kann mir jemand untenstehende Dispatcher-Sort-Parameter (fett markiert)erklären und/oder mitteilen wo ich eine detailierte Beschreibung dazu finde.

rem ----------------------------------------------------------------------
rem define variables
dim document as object
dim dispatcher as object
rem ----------------------------------------------------------------------
rem get access to the document
document = ThisComponent.CurrentController.Frame
dispatcher = createUnoService("com.sun.star.frame.DispatchHelper")

rem ----------------------------------------------------------------------
dim args1(0) as new com.sun.star.beans.PropertyValue
args1(0).Name = "ToPoint"
args1(0).Value = "$A$32"

dispatcher.executeDispatch(document, ".uno:GoToCell", "", 0, args1())

rem ----------------------------------------------------------------------
dim args2(0) as new com.sun.star.beans.PropertyValue
args2(0).Name = "ToPoint"
args2(0).Value = "$A$32:$M$45"

dispatcher.executeDispatch(document, ".uno:GoToCell", "", 0, args2())

rem ----------------------------------------------------------------------
rem dispatcher.executeDispatch(document, ".uno:DataSort", "", 0, Array())

Vielen Dank Verstancla

mikele
Beiträge: 1642
Registriert: Mo 1. Aug 2011, 20:51

Re: Erklärunf für Sort Parameter

Beitrag von mikele » Sa 5. Feb 2022, 16:33

Hallo,
die Dispatcher-Befehle bilden im Prinzip die Menüfunktionen ab und unterscheiden sich grundsätzlich von der Makroprogrammierung via Basic (basierend auf der API).
Die drei fett markierten Zeilen
1) definieren den so genannten Dispatcher, der praktisch die Befehlsübermittlung übernimmt
2) veranlasst den Cursor in die Zelle A32 zu gehen
3) geht zu /markiert den Bereich A32:M45
Der eigentliche Sortierbefehl erfolgt erst durch die Zeile

Code: Alles auswählen

rem dispatcher.executeDispatch(document, ".uno:DataSort", "", 0, Array())
die aber auskommentiert ist und daher nicht wirksam wird.
Wenn du das rem wegnimmst, wird er wirksam. Dann passiert aber nicht so viel, denn es wird lediglich der Sortierdialog aufgerufen.
Hier https://wiki.documentfoundation.org/Dev ... mands#Calc
findet sich die Info, dass auch Parameter übergeben werden können:
ByRows (bool)
HasHeader (bool)
CaseSensitive (bool)
NaturalSort (bool)
IncludeAttribs (bool)
UserDefIndex (integer)
Col1 (long)
Ascending1 (bool)
Col2 (long)
Ascending2 (bool)
Col3 (long)
Ascending3 (bool)
IncludeComments (bool)
IncludeImages (bool)
Sie entsprechen den Einstellungen, die man im Dialog machen würde.
Gruß,
mikele

Verstancla
Beiträge: 13
Registriert: Fr 21. Jan 2022, 10:58

Re: Erklärunf für Sort Parameter

Beitrag von Verstancla » So 6. Feb 2022, 14:41

Hallo mikele
Vielen Dank für deine Antwort und entschuldige meine Begriffsstutzigkeit. Dein angegebener Link verwirrt mich mehr als dass er mir nützt. Wo ist z. B. 'ByRows (bool)' beschrieben. Auch kann ich im Dialog diese Angabe nicht machen. Da habe ich nur die Möglichkeit 'Aufsteigend' oder 'Absteigend' anzugeben. In meinem Beispiel werden Statements wie 'args2().name' verwendet, in deinem jedoch solche wie ''ByRows(bool)' etc. Meine Verwirrung ist komplett. Was ich vermisse ist eine detailierte Beschreibung aller Statements und Parameter für ein Sort-Makro.
Ich war fast 40 Jahre in der Systemprogrammierung für Grosssysteme tätig und ich fand die damalige Systemliteratur um einiges verständlicher, vollständiger und brauchbarer.
Gruss Verstancla.

craig
Beiträge: 1137
Registriert: Do 21. Apr 2016, 11:42

Re: Erklärunf für Sort Parameter

Beitrag von craig » Mo 7. Feb 2022, 21:25

Hallo Verstancla,
Meine Verwirrung ist komplett. Was ich vermisse ist eine detailierte Beschreibung aller Statements und Parameter für ein Sort-Makro.
Was die Dispatch-Command an geht, bin ich auch zum großen Teil sehr verwirrt.
Ich habe kürzlich gelesen, dass es mehr als 300.000 Commands, usw. gibt.
Die einzige Doku, welche aber wohl nie fertiggestellt wird ist diese:
https://thebiasplanet.blogspot.com/p/blog-page.html

Mikele erwähnte es schon, die Command's unterscheiden sich erheblich
von der Starbasic-Programmierung auf Basis der API (objektorientiert).
Die Dispatch-Command sind eher so etwas wie eine Batch-Stapelverarbeitung.

Die Starbasic-Programmierung ist wesentlich besser dokumentiert.
Ausserdem gibt es kostenlose Handbücher und jede Menge Codebeispiele im Netz.
Hier eine Linksammlung, welche Stephan im OpenOffice-Forum zusammengestellt hat.

und wie immer im Leben: "Aller Anfang ist schwer..." :cry:
Gruß

Craig

Nie die Sicherungskopie vergessen!

════════════════════════════════════════════════
WIN 10 Pro 64-Bit • LO 7.4.5.1 (x64) • AOO 4.1.8

mikele
Beiträge: 1642
Registriert: Mo 1. Aug 2011, 20:51

Re: Erklärunf für Sort Parameter

Beitrag von mikele » Di 8. Feb 2022, 15:46

Hallo,
die Dispatch-Befehle sind (als Abbildung der Menübefehle) in den Tiefen des Quellcodes implementiert und greifen auf dieselben Funktionalitäten zurück. Daher sind sie häufig schneller in der Ausführung bzw. manche Dinge gehen eleganter oder überhaupt nur damit. Ein Klassiker ist das Kopieren von Zellen: um alle Varianten der Formatierung (bedingte, harte, per Vorlagen) zu erfassen wäre ein ganz schöner Aufwand per Basic und API-Schnittstelle nötig.
Andererseits sind die Dispatch-Befehle nicht so flexibel und eben schlecht oder gar nicht dokumentiert (theoretisch kann man es dem frei verfügbaren Quellcode entnehmen, was hier https://wiki.documentfoundation.org/Dev ... mands#Calc per Python-Script automatisiert wurde). Manche rufe auch nur die entsprechenden Dialoge auf.
Für ein Sortierungsmakro würde ich den Weg über die API gehen (siehe https://api.libreoffice.org/docs/idl/re ... fcbd114f90), das erfordert aber einen tieferen Einstieg in diese Art der Programmierung.
Für uno:DataSort versuche ich mich mal an einer Übersetzung:

Code: Alles auswählen

Sub Main

	' ----------------------------------------------------------------------
	'Festlegung der Argumente in Form eines Arrays, jedes Element ist ein PropertyValue,
	' besteht also aus einem Namen (der Eigenschaft) und einem Wert (der Eigenschaft)
	' ----------------------------------------------------------------------
	Dim args(13) as new com.sun.star.beans.PropertyValue
	
	'Sortierung von links nach rechts (Spalten sortieren?)
	args(0).Name = "ByRows"
	args(0).Value = False
	'Bereich enthält Spaltenbeschriftungen
	args(1).Name = "HasHeader"
	args(1).Value = True
	'Groß- und Kleinschreibung?
	args(2).Name = "CaseSensitive"
	args(2).Value = False
	'Natürliche Sortierung
	args(3).Name = "NaturalSort"
	args(3).Value = False
	'Formate einschließen
	args(4).Name = "IncludeAttribs"
	args(4).Value = True
	'Benutzerdefinierte Sortierreihenfolge
	args(5).Name = "UserDefIndex"
	args(5).Value = 1
	'Sortieschlüssel 1: Nummer der Spalte in der Auswahl
	args(6).Name = "Col1"
	args(6).Value = 1
	'Aufsteigend?
	args(7).Name = "Ascending1"
	args(7).Value = True
	'Sortieschlüssel 2: Nummer der Spalte in der Auswahl
	args(8).Name = "Col2"
	args(8).Value = 2
	'Aufsteigend?
	args(9).Name = "Ascending2"
	args(9).Value = False
	'Sortieschlüssel 3: Nummer der Spalte in der Auswahl
	args(10).Name = "Col3"
	args(10).Value = 4
	'Aufsteigend?
	args(11).Name = "Ascending3"
	args(11).Value = True
	'Kommentare einschließen
	args(12).Name = "IncludeComments"
	args(12).Value = False
	'Bilder einschließen
	args(13).Name = "IncludeImages"
	args(13).Value = False	
	
	document = ThisComponent.CurrentController.Frame
	dispatcher = createUnoService("com.sun.star.frame.DispatchHelper")
	dispatcher.executeDispatch(document, ".uno:DataSort", "", 0, args())

End Sub
Wenn einzelne Eigenschaften nicht gesetzt werden, dann werden die Standardwerte gesetzt.
Um also einfach einen Bereich nach der erste Spalte aufsteigend zu sortieren, würde folgende Variante reichen:

Code: Alles auswählen

Sub sortierung_kurz

	Dim args(0) as new com.sun.star.beans.PropertyValue
	
	args(0).Name = "Col1"
	args(0).Value = 1
	
	document = ThisComponent.CurrentController.Frame
	dispatcher = createUnoService("com.sun.star.frame.DispatchHelper")
	dispatcher.executeDispatch(document, ".uno:DataSort", "", 0, args())

End Sub
Es wäre allerdings etwas sinnlos, weil es dafür schon eine Schaltfläche gibt, die das leistet.
Gruß,
mikele

Verstancla
Beiträge: 13
Registriert: Fr 21. Jan 2022, 10:58

Re: Erklärung für Sort Parameter

Beitrag von Verstancla » Mi 9. Feb 2022, 16:56

Hallo,
ein letzer verzweifelter Versuch: Ich nehme an die args-Parameter (s. unten) geben dem Sort die Parameter für die Sortierung an. Meine hellseherischen Fähigkeiten reichen jedoch nicht aus, um den Zweck der Nummer nach args sowie diejenige in der nachfolgenden Klammer zu interpretieren. Was um Himmels Willen bezweckt args8(5).Name = "UserDefIndex", args8(10).Name = "IncludeComments", args8(11).Name = "IncludeImages", um nur einige zu nennen und wo sind diese beschrieben. Auch die anderen Parameter wie NaturalSort (bool), UserDefIndex (integer) und IncludeComments (bool) konnte ich nirgends finden. In keinen von euren Dokumentationshinweisen konnte ich irgend etwas in dieser Richtung finden. Es kann doch nicht so kompliziert sein, ein Sort-Makro zu programmieren!

args8(0).Name = "ByRows"
args8(0).Value = true
args8(1).Name = "HasHeader"
args8(1).Value = true
args8(2).Name = "CaseSensitive"
args8(2).Value = false
args8(3).Name = "NaturalSort"
args8(3).Value = false
args8(4).Name = "IncludeAttribs"
args8(4).Value = true
args8(5).Name = "UserDefIndex"
args8(5).Value = 0
args8(6).Name = "Col1"
args8(6).Value = 13
args8(7).Name = "Ascending1"
args8(7).Value = true
args8(8).Name = "Col2"
args8(8).Value = 2
args8(9).Name = "Ascending2"
args8(9).Value = true
args8(10).Name = "IncludeComments"
args8(10).Value = false
args8(11).Name = "IncludeImages"
args8(11).Value = true

mikele
Beiträge: 1642
Registriert: Mo 1. Aug 2011, 20:51

Re: Erklärung für Sort Parameter

Beitrag von mikele » Mi 9. Feb 2022, 17:06

Hallo,
ich habe die Bedeutung der Parameter direkt in meinem Beispielcode erläutert.
Die Parameter werden in einem Array gespeichert. Wie man es bezeichnet ist egal. Beim Aufzeichnen eines Makros werden diese Arrays einfach durchnummeriert.
Ob du es arg8 nennst oder meineparameterliste ist deine Entscheidung.
Es kann doch nicht so kompliziert sein, ein Sort-Makro zu programmieren!
Überhaupt nicht, ich habe dir ein einfaches Beispiel bereits gegeben. Was passt daran nicht?
Gruß,
mikele

Verstancla
Beiträge: 13
Registriert: Fr 21. Jan 2022, 10:58

Re: Erklärung für Sort Parameter

Beitrag von Verstancla » Mi 9. Feb 2022, 17:34

Ich glaube wir können aufhören. Du willst mich nicht verstehen. Aber ich möchte den Sort und dessen Parameter verstehen und nicht einfach nur eine Lösung. Dazu bräuchte ich eine brauchbare und verständliche Beschreibung.

mikele
Beiträge: 1642
Registriert: Mo 1. Aug 2011, 20:51

Re: Erklärunf für Sort Parameter

Beitrag von mikele » Mi 9. Feb 2022, 19:59

Hallo,
du möchtest offensichtlich keine Antworten und Erklärungen.
Gruß,
mikele

Verstancla
Beiträge: 13
Registriert: Fr 21. Jan 2022, 10:58

Re: Erklärung für Sort Parameter

Beitrag von Verstancla » Do 10. Feb 2022, 09:48

Hallo mikele,
was ich möchte sind Antworten auf meine Fragen, ganz einfach.
Gruss verstancla

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 ❤️

Antworten