Sortierschlüssel speichern

Das Tabellenkalkulationsprogramm

Moderator: Moderatoren

vierviervier
*****
Beiträge: 284
Registriert: Mo, 10.05.2010 11:17

Sortierschlüssel speichern

Beitrag von vierviervier »

Guten Tag in die Runde,

Benutze häufiger Datei - sortieren mit mehreren (ca. 5) Sortierschlüsseln.
Suche jetzt nach einem Weg die Sortierfunkiton mit den immer gleichbleibenden Schlüsslen zu speichern, um sie nicht jedesmal erneut eingeben zu müssen.

Habe es über Makro - aufnehmen probiert, aber obwohl es beim Aufnahmevorgang klappt, kommt es beim nochmaligen Ausführen zu einem falschen Sortierergebnis (der Aufnahmevorgang ist auch recht umständlich, weil man erst zum Reiter "Optionen" muss um dort bei "enthält Spaltenbeschriftungen" das Häckchen zu setzen, dann wieder zurück zu den Sortierschlüsseln...vieleicht führt das zu schnelle Ausführen des Makros zu den Fehlern).

Jetzt meine Frage: gibt es einen anderen Weg die Sortierfunktion mit festen Sortierschlüsseln abzurufen?

Vielen Dank für Hilfe, vierviervier.
Windows 10
AOO 4.1.1 LO 6.0.7.3
TrueColor
******
Beiträge: 547
Registriert: Do, 11.03.2010 11:23

Re: Sortierschlüssel speichern

Beitrag von TrueColor »

Meiner Meinung nach optimal als (selbsgeschriebene) Macros über ein Pulldown. Der Recorder taugt dazu nicht wirklich. Schau dir mal das Modul Sort an.
Dateianhänge
Projekte aktuell_v06-05_20141110.ods
(70.61 KiB) 136-mal heruntergeladen
System:
LibO 6 + LibO 7
vierviervier
*****
Beiträge: 284
Registriert: Mo, 10.05.2010 11:17

Re: Sortierschlüssel speichern

Beitrag von vierviervier »

Hallo TrueColor,

das sieht ziemlich genau nach dem aus was ich brauche.
Kann mir verschiedenste Verwendungen von so vorschiedenartigen Buttons vorstellen.
Bin nur leider noch nicht in der Lage das selbst herzustellen.
Auf Anhieb fallen mir zwei Sachen ein, die ich gerne mit so einem Pulldown lösen würde:

- Einmal eine Sortierung nach 4/5 Sortierschlüsseln.
- Dann auch ein Filter, der mir alle Werte größer gleich 100 anzeigt.

Ist das so lösbar? Kannst Du mir noch die nötigen Schlagwörter sagen, damit ich das in Tutorials/Hilfe finde?

Schon mal Danke für die Hilfe, viervieriver
Windows 10
AOO 4.1.1 LO 6.0.7.3
TrueColor
******
Beiträge: 547
Registriert: Do, 11.03.2010 11:23

Re: Sortierschlüssel speichern

Beitrag von TrueColor »

vierviervier hat geschrieben:- Einmal eine Sortierung nach 4/5 Sortierschlüsseln.
Du änderst die Anzahl (besser: die Nummer des letzten Elementes) bei der Deklaration (Dim) von SortFeld und konfigurierst deine zusätzlichen SortFelds. Denk daran, dass die Zählung mit Null beginnt, sowohl bei SortFeld und SortProp, als auch bei der Spaltenzählung!

Ich hab das noch nicht getestet. Über das GUI kann man nur 3 Kriterien haben. Aber ich gehe mal davon aus, dass man ähnlich wie bei der Bedingten Formatierung und MOTTCO über Macros mehr schafft.

Code: Alles auswählen

Sub SortBy_Status (ByVal oBereich As Object)
    Dim SortFeld(4) As new com.sun.star.table.TableSortField
    Dim SortProps(2) As new com.sun.star.beans.PropertyValue

    SortFeld(0).Field = 16 'Spalte Status_num (Kennzeichen in Zahl übersetzt, um logische Sortierung in [...]
    SortFeld(0).IsAscending = True
    SortFeld(0).FieldType = com.sun.star.util.SortFieldType.ALPHANUMERIC
    SortFeld(1).Field = 6 'Spalte Bauvorhaben
    SortFeld(1).IsAscending = True
    SortFeld(1).FieldType = com.sun.star.util.SortFieldType.ALPHANUMERIC
    SortFeld(2).Field = 8 'Spalte Bauteil
    SortFeld(2).IsAscending = True
    SortFeld(2).FieldType = com.sun.star.util.SortFieldType.ALPHANUMERIC
    SortFeld(3).Field = 20 'Spalte Sortierschlüssel4
    SortFeld(3).IsAscending = True
    SortFeld(3).FieldType = com.sun.star.util.SortFieldType.NUMERIC
    SortFeld(4).Field = 33 'Spalte Sortierschlüssel5
    SortFeld(4).IsAscending = True
    SortFeld(4).FieldType = com.sun.star.util.SortFieldType.NUMERIC
    
    SortProps(0).Name = "SortFields"
    [...]
- Dann auch ein Filter, der mir alle Werte größer gleich 100 anzeigt.
Aus der Datei das Filtern-Macro umgearbeitet:

Code: Alles auswählen

' -----------
'   Filtern
' -----------
' Beschreibung: filtert die Tabelle nach Status, ohne Bildschirmaktualisierung
' benötigte Macros: GetLastUsedRow
'
Sub Filtern

    Dim i as Integer 'Laufvariable Zeilen
    Dim nG as Integer 'Grenzwert
    Dim oDoc as Object
    Dim oSheet as Object
    Dim sQi as String 'Wert in Spalte Q (Status_num)
  
    oDoc = thisComponent
    oSheet = ThisComponent.CurrentController.ActiveSheet

    nG = 100
    
    Call ScreenLock

    For i = 1 to GetLastUsedRow(oSheet)
      sQi = oSheet.getCellRangeByName("Q"&i+1).getValue
          if sQi < nG then
            oZeilen = oSheet.getCellRangeByName("Q"&i+1).rows
            oZeilen.isvisible = false
          Endif
        Else 
          if sQi >= j then
            oZeilen = oSheet.getCellRangeByName("Q"&i+1).rows
            oZeilen.isvisible = true
          Endif
    Next i
    
    Call ScreenUpdate

End Sub
Ist das so lösbar? Kannst Du mir noch die nötigen Schlagwörter sagen, damit ich das in Tutorials/Hilfe finde?
So würde ich das mit meinen beschränkten Basic-Skills machen. Der Vorteil, alles über die Macros zu lösen, ist mMn., dass da eine gewisse Konsistenz herrscht. Deine Funktionen (egal welche, auch wenn es nur ein Popelfilter ist, den du aber immer wieder brauchst) als Macro, die du bei Bedarf in das Pulldown einbindest.

Zur Filterung habe ich hier im Forum auch schon einiges gelesen. Persistente Filter oder Spezialfilter könnten geeignete Suchworte sein.
Edit: Filtern per Macro über --> Zeilen ausblenden
System:
LibO 6 + LibO 7
vierviervier
*****
Beiträge: 284
Registriert: Mo, 10.05.2010 11:17

Re: Sortierschlüssel speichern

Beitrag von vierviervier »

Hallo TrueColor,

Erst mal Danke für Deine ausführlichen Angaben zur Lösung.

Ich habe das letzte mal mit meinem Comodore64 programmiert. Zum jetzigen Zeitpunkt übersteigt das meine Fähigkeiten ziemlich.

Zunächst: die Ebene, wo sich das mit den Programmen abspielt, ist unter Extras - Makros - Makros verwalten - LibreOfficeBasic - bearbeiten, oder?

Für deine Anweisungen bezüglich der Umarbeitung der Programme für meine Zwecke fehlen mir leider so dermaßgen die Grundkenntnisse, dass es nicht mal Sinn macht es zu probieren, da bräuchte ich ziemlich Anleitung (oder Tipps für gute Tutorials/Hilfen).

Und zuletzt ist für mich die Zuweisung des fertigen Makros an einen Button, den man dann in der Tabelle einfügt auch noch Neuland und bin da trotz Recherche im Forum und bei Google noch nicht richtig weiter.
Hatte vor 2 Wochen zum ersten mal eine Pivot-Tabelle erstellt und dachte schon ich habs jetzt voll drauf.

Wieder auf dem Boden der Tatsachen: vierviervier.
Windows 10
AOO 4.1.1 LO 6.0.7.3
TrueColor
******
Beiträge: 547
Registriert: Do, 11.03.2010 11:23

Re: Sortierschlüssel speichern

Beitrag von TrueColor »

vierviervier hat geschrieben:Zunächst: die Ebene, wo sich das mit den Programmen abspielt, ist unter Extras - Makros - Makros verwalten - LibreOfficeBasic - bearbeiten, oder?
korrekt
Für deine Anweisungen bezüglich der Umarbeitung der Programme für meine Zwecke fehlen mir leider so dermaßgen die Grundkenntnisse, dass es nicht mal Sinn macht es zu probieren, da bräuchte ich ziemlich Anleitung
Ok, mal gucken:

Zum Sortieren brauchst du, wenn du das nach meinem Muster aufziehen willst, natürlich erstmal ein Macro für jedes Szenario. Der letztens zitierte Code-Auszug "SortBy_Status" ist so eins. Was ähnliches würde der Macrorecorder ausspucken, nicht so schön.

Dim SortFeld(4) As new com.sun.star.table.TableSortField ist die Anzahl deiner Sortierschlüssel (Zählung beginnt bei 0!), hier also 5
Dim SortProps(2) As new com.sun.star.beans.PropertyValue sind die Eigenschaften, die du auch im Dialog ankreuzen kannst (Zählung beginnt bei 0!), die kannst du so übernehmen.

Dann musst du für jeden Sortierschlüssel die Spalte (Zählung beginnt bei 0!), aufsteigend/absteigend und den Feldtyp http://www.openoffice.org/api/docs/comm ... dType.html festlegen.

Dann brauchst du ein Macro, welches abhängig von deiner PullDown-Auswahl das Macro für das entsprechende Szenario aufruft. --> "Sub AuswahlSortieren(oEvent)". Dafür wiederum benötigst du ausserdem "GetLastUsedRow()" und "GetLastUsedCol()".

Je nachdem, ob du ein Kombo- oder Listenfeld verwendest, die entsprechende Zeile auskommentieren.
Select Case ist sowas wie ein Multiwahlschalter. Case fragt ab, was in der mit dem PullDown verknüpften Zelle steht (also im Pulldown der ausgewählte Eintrag, Eigenschaften:Listenfeld > Daten > Verknüpfte Zelle) und ruft das zugeordnete Macro auf.

Eigentlich einfacher als es auf den ersten Blick aussieht, die einzge Stolperfalle ist der Unterschied zw. Kombobox und Listenfeld.

In der Datei ist eine ausgeblendete Tabelle, in der die im Pulldown anzuzeigenden Einträge stehen, verknüpft in Eigenschaften:Listenfeld > Daten > Quellzellenbereich

Beim Filtern stehen die Werte für die Prüfung bei mir in Spalte Q (eigentlich das einzige, was du noch im zitierten Code anpassen musst), nG ist die Variable für den Grenzwert, den ich hier ienfach im Macro-Quelltext fest zugewiesen habe.

Dann läuft eine Schleife von 1 bis zu zur letzten benutzten Zeile (GetLastUsedRow()) und liest aus der Zelle in Spalte Q, Zeile i den numerischen Wert (getCellRangeByName(...).getValue, prüft den Wert gegen den Grenzwert (if) und belndet die Zeilen ein oder aus (oZeilen.isvisible = true bzw. false).

ScreenLock und ScreenUpdate (die fehlen in der Beschreibung unter "benötigte Macros") sind Macros, die Bildschirmaktualisierung aus-/einschalten. Damit läuft das deutlich schneller, weil nicht jede Änderung gerendert wird.
(oder Tipps für gute Tutorials/Hilfen).
Da kenne ich auch nicht wirklich was taugliches. Ich hab versucht, macros anzupassen, viel hier im Forum gelesen und gefragt. Dann noch die API-Doc unter https://wiki.openoffice.org/wiki/Docume ... ASIC_Guide
Und zuletzt ist für mich die Zuweisung des fertigen Makros an einen Button, den man dann in der Tabelle einfügt auch noch Neuland und bin da trotz Recherche im Forum und bei Google noch nicht richtig weiter.
Werkzeug "Steuerelemente" > Entwurfsmodus an > Rechtsklick auf den Button oder das Pulldown > Kontrollfeld... > Dialog: "Eigenschaften [Kontrollelement]" > Ereignisse > beim Listenfeld das Macro bei "Status geändert", beim Button z.B. bei "Aktion ausführen" zuweisen (der Button mit "..." am Zeilenende)

Ach ja, die Controls liegen bei mir auf dem Tabellenblatt, welches manipuliert wird (oSheet = ThisComponent.CurrentController.ActiveSheet), andernfalls musst du angeben, welches Blatt manipuliert werden soll.

Ich hoffe, damit kannst du bisschen was anfangen. Ich bemühe mich ja, meinen Code sauber und lesbar zu gliedern, weil ich mich sonst auch nicht mehr zurechtfinde :-)
Hatte vor 2 Wochen zum ersten mal eine Pivot-Tabelle erstellt und dachte schon ich habs jetzt voll drauf.
Und weicht's nur unwesentlich vom Beispiel ab, geht nix mehr und man bekommt's nicht angepasst... kenne ich, geht mir dauernd so. Dann wirft man den Mist in die Ecke, und irgendwann fängt man wieder von ganz vorn an, weil man alles bisher gelernte vergessen hat.
System:
LibO 6 + LibO 7
clag
********
Beiträge: 3570
Registriert: Di, 27.01.2009 15:30

Re: Sortierschlüssel speichern

Beitrag von clag »

Hallo 444,

eigentlich lässt sich das doch ganz einfach handhaben und auch bequem als Makro aufzeichnen,

Überlege welche Sortierkriterien du möchtest und benutze die Schaltflächen [ A-Z ] und [ Z-A ] zum sortieren,
das sind 2 Mausklicks je Kriterium Spaltenkopf und dann Sortier-Button anklicken,
bei 5 Kriterien also gerade mal 10 Mausklicks aufzuzeichnen und schon ist dein "Sortierschlüssel" zementiert.

Du musst allerdings beachten, immer mit dem letzten Kriterium die "Sortierorgie" zu beginnen.

hilft dir das weiter?
LG
clag

nutzt: WinXP SP3 / AOO 4.1.10 / Firefox
TrueColor
******
Beiträge: 547
Registriert: Do, 11.03.2010 11:23

Re: Sortierschlüssel speichern

Beitrag von TrueColor »

benutze die Schaltflächen [ A-Z ] und [ Z-A ] zum sortieren
Edit: Quote eingefügt

Oh, fkt. das jetzt? Hab da früher™ (ja, damals, als die Computer noch mit Dampf betrieben wurden) mal böse Erfahrungen gemacht. Da wurde nur die ausgewählte Spalte sortiert, und der Rest belassen, wie er war. Damit hatte es die ganzen Datensätze vermurkst.
System:
LibO 6 + LibO 7
Hiker
******
Beiträge: 593
Registriert: Mo, 08.09.2014 21:34
Wohnort: Berlin

Re: Sortierschlüssel speichern

Beitrag von Hiker »

Hallo,
TrueColor hat geschrieben: Ich hab das noch nicht getestet. Über das GUI kann man nur 3 Kriterien haben.


bei Bedarf: Das war für mich mal der ausschlaggebende Grund weitgehend zu LibreOffice zu wechseln, dort kann auch die GUI mehr Kriterien.
Die auch genannten Spezialfilter sind hier keine Lösung, da sie nicht sortieren.

MfG, Jörn
Libre Office 6.3.1 (Win 10 Pro) / Libre Office 6.0.7 (Win8.1 Pro, Win 7 Pro) / AOO (Win 7)
TrueColor
******
Beiträge: 547
Registriert: Do, 11.03.2010 11:23

Re: Sortierschlüssel speichern

Beitrag von TrueColor »

Das war für mich mal der ausschlaggebende Grund weitgehend zu LibreOffice zu wechseln, dort kann auch die GUI mehr Kriterien.
Oh, gut zu wissen!
Darauf hin habe ich gleich mal die Bedingte Formatierung getestet, hier kann man nun auch mehr als 3 Bedingungen über das GUI definieren. (LibO 4.1.4.2)
System:
LibO 6 + LibO 7
vierviervier
*****
Beiträge: 284
Registriert: Mo, 10.05.2010 11:17

Re: Sortierschlüssel speichern

Beitrag von vierviervier »

Hallo clag,

manchmal dauert es bei mir bißchen mit der Antwort, privat gut eingespannt.

ich hatte es ja ursrpüpnglich über Makroaufzeichnung versucht, hatte nicht funktioniert, sollte das doch gehen wärs natürlich schön.

Zunächst noch 2 Fragen:
- hatte versucht das Makro über Tastatur aufzuzeichnen (was im Prinzip mit Shift + Tabulator, Leerzeichentaste für Häkchen (siehe unten (Häkchen bei "Bereich enthält Spaltenbeschriftungen")) ... geht, da ich dachte, das Maus nicht geht, ist das nicht (mehr) so?
- du schreibst mit dem letzten Kriterium das sortieren beginnen, das habe ich nicht verstanden, ich dachte der Sortierschlüssel1 wird mit dem Kriterium belegt, das zuerst angewendet werden soll?

Dann war das Problem: man mußte zunächst als Teil des Makros im Sortierfenster zu den Optionen und dort Häkchen bei "Bereich enthält Spaltenbeschriftungen" setzen (ansonsten wird beim soriteren die erste Spalte in den Sortiervorgang mit einbezogen). Was dieses Häkchen betrifft bin ich mir aber nie ganz sicher: manchmal ist es schon gesetzt, manchmal muss man es setzen. Hat man es gesetzt bleibt es manchmal bei nächsten arbeiten mit der Sortierfunktion, manchmal muss man es erneut setzen. Ich habe da die zugrundeliegende Gesetzmäßigkeit noch nicht durchschaue. Das erschwert aber das Gestalten des Makros, da der Vorgang abhängig vom Ausgangszustand (Häkchen gesetzt oder eben nicht) zu gegensätzlichen Ergebnissen führt.
Da wäre es schon mal eine große Vereinfachung wenn man in den Grundeinstellungen wählen könnte, dass das Häkchen standartmäßig gesetzt ist, da habe ich bisher aber nichts gefunden.
Na und ansonsten war es bei meinen Versuchen bisher so, dass wenn das Makro aufgenommen wird, das Sortierergebnis passt. Gehe ich dann ganz raus aus der Datei, öffne sie erneut, um eine klare Ausgangslage für das makro zu haben, und lasse dann das makro abspielen, eine andere Sortierung das Ergbenis ist (die Kriterien habe ich nicht durchschaut).

Sorry fürs manchmal umständlich formulieren, mir fehlen manchmal die Fachbegriffe / das Hintergrundwissen) um es kompakter zu formulieren.

Vielen Dank für Hilfe, vierviervier.
Windows 10
AOO 4.1.1 LO 6.0.7.3
clag
********
Beiträge: 3570
Registriert: Di, 27.01.2009 15:30

Re: Sortierschlüssel speichern

Beitrag von clag »

Hallo 444,

in diesem Sortieren Fall, funktioniert die Makroaufzeichnung auch, wenn man alles mit der Maus ansteuert

das "Problem" der Spaltenköpfe ist keines da OO sich hier die letzten Einstellungen merkt
aber zur Sicherheit kann man natürlich beim ersten Sortiervorgang den Sortierdialog aufrufen
und die Optionen entsprechend setzen, danach kann man "hemmungslos" die Buttons nutzen.

Wenn du im Sortieren-Dialog drei Spalten angibst ist die erste Spalte die "vorrangige" und die dritte die "letztrangige",
machst du das händisch, musst du mit der letztrangigen Sortierung beginnen und dich zur vorrangigen hoch arbeiten.

habe dir mal ein kleine Beispiel erstellt.
mehrfach_sortieren_aufgezeichnet.ods
(12.69 KiB) 88-mal heruntergeladen
vielleicht ist es so etwas deutlicher zu erkennen?
LG
clag

nutzt: WinXP SP3 / AOO 4.1.10 / Firefox
Antworten