Seite 1 von 1
[gelöst] sortieren funktioniert nicht
Verfasst: Mo, 26.10.2009 20:08
von der_Zerstreute
hey leute ,
ich hab da nen kleines makro geschrieben welches eigentlich die zeilen eines ausgewählten Bereiches sortieren soll.
Leider muß ich feststellen das es nicht funktionert so wie ich es will. Genau genommen passiert gar nix .
wo liegt mein Gedankenfehler ...
Code: Alles auswählen
sub main
dim count as integer
dim zero as integer
Dim SortierKrit(3) As new com.sun.star.beans.PropertyValue
Dim SortierFeld(0) As new com.sun.star.table.TableSortField
dim check as double
dim colour as long
dim fil as object
count = 1
check = 1
colour = 16777062
do while check >0
count = count + 1
check = thisComponent.sheets(0).getCellByPosition(0,count).value
loop
SortierFeld(0).field = 5
SortierFeld(0).IsAscending = false
SortierFeld(0).FieldType = com.sun.star.util.SortFieldType.ALPHANUMERIC
SortierKrit(0).Name = "SortFields"
SortierKrit(0).Value = SortierFeld()
SortierKrit(1).Name = "SortColumns"
SortierKrit(1).Value = true
SortierKrit(2).Name = "ContainsHeader"
SortierKrit(2).Value = false
SortierKrit(3).Name = "IsCaseSensitive"
SortierKrit(3).Value = false
fil = thiscomponent.sheets(0).getcellrangebyposition(0,1,9,count).sort(SortierKrit())
end sub
danke wie immer schonmal im vorraus
Re: sortieren funktioniert nicht
Verfasst: Di, 27.10.2009 07:37
von Charly
Hallo!
der_Zerstreute hat geschrieben:
ich hab da nen kleines makro geschrieben welches eigentlich die zeilen eines ausgewählten Bereiches sortieren soll
.
.
SortierKrit(1).Name = "SortColumns"
SortierKrit(1).Value = true
Du willst nach Zeilen sortieren, schreibst aber in deinem Makro, dass es nach Spalten sortieren soll. Schreibe mal:
Code: Alles auswählen
SortierKrit(1).Name = "SortColumns"
SortierKrit(1).Value = false
Gruß
Charly
Re: sortieren funktioniert nicht
Verfasst: Mi, 28.10.2009 17:04
von der_Zerstreute
ich habe die Zeile noch angepasst aber es funktioniert trotzdem nicht ..
vieleicht könnt ihr mir besser helfen wenn ihr die Tabelle kennt die er sortieren soll.
Ich pack also mal anbei ein Bildschirmausschnitt von der Tabelle.
Ziel des Makros soll es sein die Spalte "aktuell" (F) von groß nach klein zu sortieren .
Am Anfang des Makros ist eine Schleife die erkennen soll von wo sich der letzte Eintrag in der Tabelle befindet um den zu markierenden Bereich zu definieren.
Hoffe ihr könnt mir helfen..
Re: sortieren funktioniert nicht
Verfasst: Do, 29.10.2009 07:58
von Charly
Hallo Zerstreuter!
Eines vorweg. Du wirst schneller und mehr Antworten bekommen, wenn du die Calc-Datei als Datei und nicht als Bild anhängst.
Es ist nämlich eine ganz schöne Tiparbeit, um eine Testdatei zu erzeugen, was wohl nicht jedermanns Sache ist.
Ich habe deinen Code berichtigt. Hier das Ergebnis.
Code: Alles auswählen
sub main
dim count as integer
dim zero as integer
Dim SortierKrit(3) As new com.sun.star.beans.PropertyValue
Dim SortierFeld(0) As new com.sun.star.table.TableSortField
dim check as double
dim colour as long
dim fil as object
count = 1
check = 1
colour = 16777062
do while check >0
count = count + 1
check = thisComponent.sheets(0).getCellByPosition(0,count).value
loop
SortierFeld(0).field = 5
SortierFeld(0).IsAscending = false
SortierFeld(0).FieldType = com.sun.star.util.SortFieldType.AUTOMATIC
SortierKrit(0).Name = "SortFields"
SortierKrit(0).Value = SortierFeld()
SortierKrit(1).Name = "SortColumns"
SortierKrit(1).Value = false
SortierKrit(2).Name = "ContainsHeader"
SortierKrit(2).Value = false
SortierKrit(3).Name = "IsCaseSensitive"
SortierKrit(3).Value = false
thiscomponent.sheets(0).getcellrangebyposition(0,2,9,count).sort(SortierKrit())
end sub
Gruß
Charly
Re: sortieren funktioniert nicht
Verfasst: Do, 29.10.2009 18:02
von der_Zerstreute
Hallo Charly ,
Dickes Danke für deine Mühe , nächstes Mal häng ich es als Tabelle an !
Deine Korrektur hat geholfen !
Jetzt kann ich das Makro endlich fertig stellen
Gruß
Daniel
Re: sortieren funktioniert nicht
Verfasst: Do, 29.10.2009 18:26
von der_Zerstreute
mhm .. also eine Kleinigkeit gibt da noch ..
anscheinend sortiert der die Formatierung mit, das will ich aber nicht , wie bekomme ich hin das er die Formatierung links liegen läßt ?
ich habe das Makro jetzt mal um die fehlenden Funktionen ergänzt und mal die ganze Datei angehängt, vieleicht kann mir jemand weiterhelfen.
Danke schonmal im Vorraus
Z.
Re: sortieren funktioniert nicht
Verfasst: Do, 29.10.2009 18:56
von Charly
Hallo!
Welche Formatierung meinst du? Vielleicht kannst du deine Wünsche noch etwas erläutern.
Wenn du die gelbe Markierung für die Null-Restbestände meinst, würde ich dazu kein Makro verwenden, sondern eine Bedingte Formatierung. Bedingung: Die Zeile soll gelb sein, wenn Restbestand = 0.
Gruß
Charly
Re: sortieren funktioniert nicht
Verfasst: Fr, 30.10.2009 09:06
von der_Zerstreute
hallo Charly ,
ich meine den Rahmen, wenn das Makro fertig ist habe ich plötzlich den Dicken Rand-Rahmen von der letzten Zeile mitten in der Tabelle :/
Re: sortieren funktioniert nicht
Verfasst: Fr, 30.10.2009 11:08
von Charly
Hallo!
Das mit dem Rahmen habe ich gar nicht bemerkt.
Beim Sortierungsvorgang gibt es meines Wissens keine Möglichkeit, das Mitsortieren der Formatierung zu unterbinden. Das ist auch nicht sinnvoll, da sich Formatierungen ja nicht nur auf Rahmen beschränken, sondern z.B auch auf Datums und Zahlenformate.
Im Makro kann man allerdings zunächst den Rahmen auf "dünn" setzen um ihn am Ende wieder auf den Ursprung zurückzusetzen.
Ich habe das mal in dein Makro eingebaut. Die Rahmenstärke musst du dabei noch überprüfen. Diese habe ich nur geschätzt.
Gruß
Charly
Re: sortieren funktioniert nicht
Verfasst: Fr, 30.10.2009 12:32
von Charly
Hallo!
Charly hat geschrieben:
Die Rahmenstärke musst du dabei noch überprüfen. Diese habe ich nur geschätzt.
Ich habe die Rahmenstärke jetzt per Makro ausgelesen. Danach ist die von dir vorgegebene dünne Linie "18" und die dicke Linie "88" 100stel mm.
Gruß
Charly
Re: sortieren funktioniert nicht
Verfasst: Mo, 02.11.2009 11:09
von Charly
Hallo!
Ich habe heute festgestellt, dass es beim Sortieren über das Menü eine Einstellung gibt, die das Sortieren von Formaten verhindert. Leider ist mir die entsprechende Einstellung in Starbasic nicht bekannt. Ich habe daher jetzt das Sortieren mit dem Makrorekorder aufgezeichnet und in dein Programm integriert.
Code: Alles auswählen
sub sortieren1()
dim count as integer
dim zero as integer
dim ende as integer
dim check as double
dim colour as long
Dim Dok as object
Dim Controller as Object
dim document as object
dim dispatcher as object
Dim Blatt as object
Dim Bereich as object
dim args1(6) as new com.sun.star.beans.PropertyValue
Dok = ThisComponent
Controller = Dok.GetCurrentController
Blatt = dok.sheets(0)
document = Controller.Frame
dispatcher = createUnoService("com.sun.star.frame.DispatchHelper")
args1(0).Name = "ByRows"
args1(0).Value = true
args1(1).Name = "HasHeader"
args1(1).Value = false
args1(2).Name = "CaseSensitive"
args1(2).Value = false
args1(3).Name = "IncludeAttribs"
args1(3).Value = false
args1(4).Name = "UserDefIndex"
args1(4).Value = 0
args1(5).Name = "Col1"
args1(5).Value = 6
args1(6).Name = "Ascending1"
args1(6).Value = false
' ----------------------------------------------------------------------------------------
' Grundvariablen beschreiben
' ----------------------------------------------------------------------------------------
count = 1
check = 1
colour = 16777062
' ----------------------------------------------------------------------------------------
' ermitteln der letzten Zeile
' ----------------------------------------------------------------------------------------
do while check >0
count = count + 1
check = Blatt.getCellByPosition(0,count).value
loop
ende = count - 1
' ----------------------------------------------------------------------------------------
' Tabelle nach vorhandener Menge sortieren
' ----------------------------------------------------------------------------------------
Bereich = Blatt.getcellrangebyposition(0,2,9,ende)
Controller.select(Bereich)
dispatcher.executeDispatch(document, ".uno:DataSort", "", 0, args1())
' ----------------------------------------------------------------------------------------
' Erste Zeile ohne Restbestand suchen
' ----------------------------------------------------------------------------------------
check = 1
count = 1
do while check >0
count = count + 1
check = thisComponent.sheets(0).getCellByPosition(5,count).value
loop
zero = count
' ----------------------------------------------------------------------------------------
' Vorhandene Lebensmittel nach Artikelnummer sortieren
' ----------------------------------------------------------------------------------------
Bereich= Blatt.getcellrangebyposition(0,2,9,zero)
Controller.select(Bereich)
args1(5).Value = 1
dispatcher.executeDispatch(document, ".uno:DataSort", "", 0, args1())
' ----------------------------------------------------------------------------------------
' nicht vorhandene Lebensmittel nach Artikelnummer sortieren und farblich hinterlegen
' ----------------------------------------------------------------------------------------
Bereich = Blatt.getcellrangebyposition(0,zero+1,9,ende)
Controller.select(Bereich)
dispatcher.executeDispatch(document, ".uno:DataSort", "", 0, args1())
Bereich.cellbackcolor = colour
end sub
Gruß
Charly
Re: sortieren funktioniert nicht
Verfasst: Mo, 02.11.2009 13:34
von Charly
Hallo!
Jetzt bin ich im Internet doch fündig geworden. Im Starbasic gibt es jetzt einen SortDesciptor. Dort kann man einstellen, dass ohne Formate sortiert werden soll. Name = BindFormatsToContent. Allerdings braucht beim SortDescriptor nicht mehr der Name mitgegeben zu werden. Die Daten müssen nur im richtigen Arrayfeld stehen. Ich habe daher die Namen zwar mitgeschrieben, ober durch Hochkomma auskommentiert.
Code: Alles auswählen
sub Sortieren2()
dim count as integer
dim zero as integer
dim ende as integer
Dim SortierKrit as object
Dim SortierFeld(0) As new com.sun.star.table.TableSortField
dim check as double
dim colour as long
Dim Dok as Object
Dim Blatt as Object
Dim Bereich as Object
Dok = ThisComponent
Blatt = Dok.Sheets(0)
SortierKrit = Blatt.createSortDescriptor()
' ----------------------------------------------------------------------------------------
' Grundvariablen beschreiben
' ----------------------------------------------------------------------------------------
count = 1
check = 1
colour = 16777062
' ----------------------------------------------------------------------------------------
' ermitteln der letzten Zeile
' ----------------------------------------------------------------------------------------
do while check >0
count = count + 1
check = Blatt.getCellByPosition(0,count).value
loop
ende = count - 1
' ----------------------------------------------------------------------------------------
' Tabelle nach vorhandener Menge sortieren
' ----------------------------------------------------------------------------------------
SortierFeld(0).field = 5
SortierFeld(0).IsAscending = false
SortierFeld(0).IsCaseSensitive = false
SortierFeld(0).FieldType = com.sun.star.util.SortFieldType.AUTOMATIC
Bereich = Blatt.getcellrangebyposition(0,2,9,ende)
'SortierKrit(0).Name = "IsSortColumns"
SortierKrit(0).Value = false
'SortierKrit(1).Name = "ContainsHeader"
SortierKrit(1).Value = false
'SortierKrit(3).Name = "SortFields"
SortierKrit(3).Value = SortierFeld
'SortierKrit(4).Name = "BindFormatsToContent"
SortierKrit(4).Value = false
Bereich.sort(SortierKrit())
' ----------------------------------------------------------------------------------------
' Erste Zeile ohne Restbestand suchen
' ----------------------------------------------------------------------------------------
check = 1
count = 1
do while check >0
count = count + 1
check = Blatt.getCellByPosition(5,count).value
loop
zero = count
' ----------------------------------------------------------------------------------------
' Vorhandene Lebensmittel nach Artikelnummer sortieren
' ----------------------------------------------------------------------------------------
SortierFeld(0).field = 0
SortierKrit(3).Value = SortierFeld()
Bereich = Blatt.getcellrangebyposition(0,2,9,zero)
Bereich.sort(SortierKrit())
' ----------------------------------------------------------------------------------------
' nicht vorhandene Lebensmittel nach Artikelnummer sortieren und farblich hinterlegen
' ----------------------------------------------------------------------------------------
SortierFeld(0).field = 0
SortierKrit(3).Value = SortierFeld()
Bereich = Blatt.getcellrangebyposition(0,zero+1,9,ende)
Bereich.sort(SortierKrit())
Blatt.getcellrangebyposition(0,zero+1,9,ende).cellbackcolor = colour
end sub
Ich hoffe unter den ganzen Varianten, findest du eine dir genehme.
Gruß
Charly