BITTE helfen Sie uns HEUTE mit einer SPENDE
Helfen Sie das OpenOffice 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 OpenOffice Forums verwendet.
🤗 Als Dankeschön werden Sie im Forum als OO-SUPPORTER gekennzeichnet. 🤗

[GELÖST] - Problem: Erstellung/Sortierung/Formatierung einer Mitgliederliste über ein Makro

Alles zur Programmierung im OpenOffice.org
Antworten
Kelly
Beiträge: 1
Registriert: Do 28. Apr 2022, 11:38

[GELÖST] - Problem: Erstellung/Sortierung/Formatierung einer Mitgliederliste über ein Makro

Beitrag von Kelly » Do 28. Apr 2022, 13:22

Hi!

Ich stehe vor einem Problem für die automatisierte Erstellung und Sortierung einer Mitgliederliste die ich aus einer Datenbank bekomme..

Da ich das öfters machen muss, dachte ich mir, das ich mir dafür ein Makro erstelle, scheitere aber daran und händisch ist es auf die Dauer viel zu viel Aufwand..

Vielleicht kann mir von Euch jemand Tips dazu geben...




Als Ausgangssituation habe ich ein importiertes File in einer Tabelle in Calc..

Die Tabelle gliedert sich in 3 Spalten und die Anzahl der Einträge ist von Tabelle zu Tabelle unterschiedlich (also 1 bis n)

A Mitgliedsnummer
B Name
C Rang


Mit dieser Tabelle sollte im Makro folgendes geschehen:

A.) die ganzen Einträge (1 bis n) sollten absteigend nach dem Rang sortiert werden (9 bis 0)
B.) die einzelnen Ränge (9 bis 0) sollten in sich nach dem Namen aufsteigend alphabetisch sortiert werden (A bis Z)
C.) eine neue Spalte soll am Anfang eingefügt werden, die eine laufende Nummer beginnend bei 1 bekommt (1 bis n)
D.) nach jedem einzelnen Rang (9 bis 1) sollte dann eine Leerzeile zwecks Übersicht/Gliederung eingefügt werden



Was ich schaffe ist A und C, das Sortieren der Ränge absteigend und das Einfügen der Spalte mit der laufenden Nummerierung

Was ich nicht schaffe ist B und D, da ich nicht weiß, wie ich in der Spalte die einzelnen Ränge herausfinden und diese Einträge nach dem Namen sortieren kann, geschweige nach dem letzten Eintrag mit dem Rang ein Leerzeile einfügen kann.

Ich finde heraus wie "oft" jeder Rang in Spalte C vorhanden ist, jedoch finde ich keine Möglichkeit diese Ränge dann einzeln über ein Makro zu markieren und sie nach Spalte B zu sortieren..



Hier mein derzeitiges Makro:

Code: Alles auswählen

sub membersort

rem A.) Tabelle nach Rang in Spalte C absteigend sortieren
dim document   as object
dim dispatcher as object
document   = ThisComponent.CurrentController.Frame
dispatcher = createUnoService("com.sun.star.frame.DispatchHelper")
dim args1(0) as new com.sun.star.beans.PropertyValue
args1(0).Name = "ToPoint"
args1(0).Value = "$C$1"
dispatcher.executeDispatch(document, ".uno:GoToCell", "", 0, args1())
dispatcher.executeDispatch(document, ".uno:SelectAll", "", 0, Array())
document   = ThisComponent.CurrentController.Frame
dispatcher = createUnoService("com.sun.star.frame.DispatchHelper")
dispatcher.executeDispatch(document, ".uno:SortDescending", "", 2, Array())
dim args4(0) as new com.sun.star.beans.PropertyValue
args4(0).Name = "ToPoint"
args4(0).Value = "$A$1"
dispatcher.executeDispatch(document, ".uno:GoToCell", "", 0, args4())
dispatcher.executeDispatch(document, ".uno:SelectColumn", "", 0, Array())
dispatcher.executeDispatch(document, ".uno:InsertColumnsBefore", "", 0, Array())

rem B.) Alle Ränge untereinander nach Spalte B aufsteigend sortieren
rem fehlt

rem C.) Spalte vorne einfügen und von 1 bis n nummerieren
oSheet = thisComponent.sheets(0) 
ocursor = oSheet.createCursor()
oCursor.gotoEnd()
letzte=(ocursor.getRangeAddress.endRow+1)
dim args7(0) as new com.sun.star.beans.PropertyValue
args7(0).Name = "ToPoint"
args7(0).Value = "$A$1"
dispatcher.executeDispatch(document, ".uno:GoToCell", "", 0, args7())
dim args8(0) as new com.sun.star.beans.PropertyValue
args8(0).Name = "StringName"
args8(0).Value = "1"
dispatcher.executeDispatch(document, ".uno:EnterString", "", 0, args8())
dispatcher.executeDispatch(document, ".uno:JumpToNextCell", "", 0, Array())
dim args10(0) as new com.sun.star.beans.PropertyValue
args10(0).Name = "ToPoint"
args10(0).Value = "$A$1"
dispatcher.executeDispatch(document, ".uno:GoToCell", "", 0, args10())
dim args11(0) as new com.sun.star.beans.PropertyValue
args11(0).Name = "EndCell"
args11(0).Value = "$A$letzte"
dispatcher.executeDispatch(document, ".uno:AutoFill", "", 0, args11())
dim args12(0) as new com.sun.star.beans.PropertyValue
args12(0).Name = "ToPoint"
args12(0).Value = "$A$1:$A$letzte"
dispatcher.executeDispatch(document, ".uno:GoToCell", "", 0, args12())
dim args13(0) as new com.sun.star.beans.PropertyValue
args13(0).Name = "Sel"
args13(0).Value = false
dispatcher.executeDispatch(document, ".uno:GoToStart", "", 0, args13())
dim args14(0) as new com.sun.star.beans.PropertyValue
args14(0).Name = "ToPoint"
args14(0).Value = "$A$1"
dispatcher.executeDispatch(document, ".uno:GoToCell", "", 0, args14())

rem D.) nach jedem Abschnitt mit den Rängen eine Leerzeile einfügen
rem fehlt

end sub

Antworten