mit hilfe eines Makro Tabelle sortieren

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

Moderator: Moderatoren

clag
********
Beiträge: 3570
Registriert: Di, 27.01.2009 15:30

mit hilfe eines Makro Tabelle sortieren

Beitrag von clag »

Hallo Leutz,

ich habe mal wieder erfolglos versucht ein Makro aufzuzeichen und was dabei rauskommt versteh ich nicht und macht auch nicht was es soll :?
deswegen wende ich mich gleich mit einer Bitte an euch.

ich möchte mit Hilfe eines Makros das sortieren einer Tabelle vereinfachen,
(über Menue, Sortieren, auswahl Spalte, auf/absteigen ist der normale Weg bei mehrmaligem ausführen nervend)

ich dacht an ein Makro das den Inhalt der aktiven Zelle ausliest diesen als Spaltenbeschriftung wertet und dann den Datenbereich darunter entsprechend auf oder absteigend sortiert,
dann könnte man das Makro ohne Veränderung auf jede beliebig bezeichnete Spalte anwenden.

Hat einer von euch so etwas schon mal von Hand generiert, oder kennt wer ein Makro was sich dafür eignen könnte?

Ja ich weiß ist ne freche Frage und wen es in den Fingern kribbelt zu schreiben, "man üb mal Basic" den kann ich auch verstehen :)
(mit Excel wärs mir wohl auch nicht passiert)

trotzdem versuch ich es mal :D
LG
clag

nutzt: WinXP SP3 / AOO 4.1.10 / Firefox
Charly
*****
Beiträge: 450
Registriert: Di, 20.01.2004 13:14
Wohnort: München

Re: mit hilfe eines Makro Tabelle sortieren

Beitrag von Charly »

Hallo Clag!
Clag hat geschrieben: ich dacht an ein Makro das den Inhalt der aktiven Zelle ausliest diesen als Spaltenbeschriftung wertet und dann den Datenbereich darunter entsprechend auf oder absteigend sortiert,
dann könnte man das Makro ohne Veränderung auf jede beliebig bezeichnete Spalte anwenden
Ich habe mal versucht das umzusetzen.

Code: Alles auswählen

Sub Sortieren_spezial()

Dim Dok as object
Dim Controller as object
Dim Zelle as object
Dim Kriterien(3) as new com.sun.star.beans.PropertyValue
Dim SortFeld(0) as new com.sun.star.table.TableSortField
Dim Add as Object
Dim Spalte as long
Dim Zeile as long
Dim Blatt as Object
Dim Cursor as object
Dim Endspalte as long
Dim Endzeile as long
Dim Bereich as object


'Abfrage ob aufsteigend oder absteigend sortiert werden soll

Frage = MSGBOX("Soll aufsteigend sortiert werden?",4)

If Frage = 7 then
Sortfeld(0).IsAscending = false
else 
Sortfeld(0).IsAscending = true
end if

'Sortierspalte und Bereich ermitteln
Dok = ThisComponent
Controller = Dok.CurrentController
Zelle = Dok.currentSelection
Add = Zelle.getCellAddress()
Spalte = Add.column 
Zeile = Add.row 
Blatt = Controller.activeSheet
Cursor = Blatt.createCursor
Cursor.goToEndOfUsedArea(0)
Endspalte = Cursor.getRangeAddress().EndColumn
Endzeile = Cursor.getRangeAddress().EndRow

Bereich = Blatt.getCellRangeByPosition(0,Zeile,Endspalte,Endzeile)

'Sortierkriterien 

SortFeld(0).Field = Spalte
Sortfeld(0).FieldType = com.sun.star.util.SortFieldType.AUTOMATIC

Kriterien(0).Name = "SortFields"
Kriterien(0).Value = SortFeld()
Kriterien(1).Name = "SortColumns"
Kriterien(1).Value = false
Kriterien(2).Name = "ContainsHeader"
Kriterien(2).Value = true
Kriterien(3).Name = "IsCaseSensitiv"
Kriterien(3).Value = false

'Sortieren
Bereich.Sort(Kriterien())

end sub
Teste das mal.

Gruß
Charly
clag
********
Beiträge: 3570
Registriert: Di, 27.01.2009 15:30

Re: mit hilfe eines Makro Tabelle sortieren

Beitrag von clag »

Hallo Charly,

das war ja eine echte Punktlandung, Super !!
funktioniert tiptop

jetzt bei der praktischen erprobung sind mir zwei Dinge aufgefallen wo ich etwas zu ungenau gedacht habe
1.
clag hat geschrieben: ich dacht an ein Makro das den Inhalt der aktiven Zelle ausliest
das sollte man vielleicht doch besser auf die Zeile beschränken die tatsächlich die Spaltenköpfe enthält also gleich im Code die Zeile X benennen
sonst verliert man eventuell den Überblick wenn das Makro aufruft und es war noch eine Zelle mittendrin markiert
Ursprünglich hatte ich gedacht das SortierMakro auch mit dem Listener auszulösen dann wäre es gleich auf die Zeile fixiert,
aber ich befürchte so viele "Listener" ca 15 reduzieren die Geschwindigkeitauf

2. die Abfrage ob auf oder absteigend ist unter dem Aspekt "Mauskilometer reduzieren eher contra" ;-)
da würde ich ein generelles auf oder absteigend vorziehen, dann muss man eben 2 Buttons platzieren

oder man speichert den letzten Sortierzustand zB in einer Hilfszelle oberhalb der Spaltenköpfe,
dann müsste das Makro bei aufruf diese Zeile mit HilfsZellen leeren bis auf die Spalte aus der der Aufruf erfolgt.
Dort setzt das Makro ein x nachdem es absteigend sortiert hat und wenn das Makro bei erneutem Aufruf
aus dieser Spalte in der HilfsZelle ein x vorfindet wird aufsteigend sortiert und das x wieder entfernt,
aber vielleicht geht's ja auch viel einfacher??

wie sich das mit OO Basic verwirklichen läßt entzieht sich leider meinem Wissen :x

da kann ich nur auf deinen Ehrgeiz hoffen ...... :roll:
LG
clag

nutzt: WinXP SP3 / AOO 4.1.10 / Firefox
Charly
*****
Beiträge: 450
Registriert: Di, 20.01.2004 13:14
Wohnort: München

Re: mit hilfe eines Makro Tabelle sortieren

Beitrag von Charly »

Hallo Clag!

Ich habe das Sortiermakro mal in deine Datei von dem anderen Thread eingebaut. Ich habe dabei die zwei-Button-Lösung verwirklicht. Als Spaltenkopfzeile habe ich die Zeile "10" (=Index 9) festeingestellt.


Gruß
Charly
Dateianhänge
test-db_V5a-2.ods
(23.45 KiB) 133-mal heruntergeladen
clag
********
Beiträge: 3570
Registriert: Di, 27.01.2009 15:30

Re: mit hilfe eines Makro Tabelle sortieren

Beitrag von clag »

Hallo Charly,

habe noch ein wenig mit der Test DB probiert und bin zu dem Schluss gekommen,
das zwei Buttons auf jeden Fall die bessere Lösung sind, denn dann hat man sofort Zugriff auf die gewünschte Sortierrichtung !

Also reicht völlig das Makro ganz simpel zu halten eins für die auf- das andere für die absteigende Sortierung
alles andere ist eher unnötigen Aufwand (schick aber eben doch unnötig) :)

eine fixierung auf eine Zeile wär aber schon sinnig
test-db_V5b.ods
(25.6 KiB) 158-mal heruntergeladen
mit Makro und SortierButtons
LG
clag

nutzt: WinXP SP3 / AOO 4.1.10 / Firefox
clag
********
Beiträge: 3570
Registriert: Di, 27.01.2009 15:30

Re: mit hilfe eines Makro Tabelle sortieren

Beitrag von clag »

Hi Charly,

uhps, da haben wir uns wohl gerade verpasst gelle :D
da guck ich doch gleich mal
LG
clag

nutzt: WinXP SP3 / AOO 4.1.10 / Firefox
clag
********
Beiträge: 3570
Registriert: Di, 27.01.2009 15:30

Re: mit hilfe eines Makro Tabelle sortieren

Beitrag von clag »

Hallo Charly,

was soll ich sagen..

PERFEKT !


so geht es zügig voran mit dem Tabellensortieren und umsortieren :D

allerdings hab ich noch eine Frage,
sind die Funktionen wenn sie per Basic aufgerufen werden vor Kollision mit anderen Funktionen geschützt?

Weil das sortieren meiner "echten Tabelle" dauert es schon ein paar Sekunden 10-15 bis ein Sortiervorgang abgeschlossen ist,
und da erwische ich mich dann immer wieder, dass ich voller Ungedult schon mit anderen Sachen anfange zB Filtern, :?
ist OOo3.01 da intern abgesichert und beginnt eine neue Aktion erst wenn die laufende abgeschlossen ist?
oder gibt das irgendwann einmal gewaltig DatenSalat ?

und nochmal DANKE
LG
clag

nutzt: WinXP SP3 / AOO 4.1.10 / Firefox
Charly
*****
Beiträge: 450
Registriert: Di, 20.01.2004 13:14
Wohnort: München

Re: mit hilfe eines Makro Tabelle sortieren

Beitrag von Charly »

Hallo Clag!

Schön, dass es klappt.

Deine Frage wegen der Kollision, kann ich leider nicht beantworten. Ich habe in dieser Hinsicht keine Erfahrung. Solange das Makro läuft, gibt es insoweit einen Schutz, dass du kein zweites Makro aufrufen kannst. Hier könnte es aber sein, dass das Makro nur den Sortiervorgang anstößt und sich dann beendet. Ich weiß es nicht. Das müsste getestet werden.

mfg
Charly
Antworten