Excel - Sortierreihenfolge benutzerdefiniert

  • Hallo zusammen,

    ich wollte heute die benutzerdefinierte Sortierreihenfolge von Excel in Autoit umsetzen.
    Leider ohne Erfolg.

    Daran scheitere ich schon.
    Application.AddCustomList ListArray:=Array("A","B","C","AA","AB","AC")

    Wie ist dies in AutoIt umzusetzen?
    $oAppl.AddCustomList......


    Vielen Dank.


    Schöne Grüße

    leertaste

  • Code
    Global $aSortArray[] = ["A","B","C","AA","AB","AC"]
    $oExcel.AddCustomList($aSortArray)
  • Danke, aber trotzdem mache ich was falsch.
    Die vorgegebene Sortierung wird nicht angewendet.

    Eigentlich ist mein Ziel zuerst nach Spalte A und dann nach Spalte B zu sortieren.
    Da aber die Sortierreihenfolge das größere Problem ist habe ich erst mich daran versucht.
    Klappt aber nicht....

    Das Ergebnis sollte so aussehen.

    Name ID
    Anton A
    Anton B
    Anton C
    Anton AA
    Anton AB
    Anton AC
    Berta A
    Berta B
    Berta C
    Berta AA
    Berta AB
    Berta AC

    Danke

  • Das sollte aber mit _Excel_RangeSort auch gehen.

  • Meinst du so?

    AutoIt
    Global $SortOrder[] = ["A","B","C","AA","AB","AC"]
    _Excel_RangeSort($oWorkbook, Default, "A:B", "A:A", $xlAscending, $xlSortNormal, $xlYes, False, $xlSortColumns, "B:B", $SortOrder)

    Lasse ich Key2 weg wird nach Spalte A richtig sortiert. Nehme ich Key2 mit Spalte B und Order2 = default hinzu passt es auch noch.
    Übergebe ich aber für die Order2 das Array wird sowohl Spalte A und Spalte B ohne klarer Reihenfolge sortiert.
    In Excel wird aber unter Sortieren/Benutzerdefiniert Sortieren.../Reihenfolge/Benutzerdefinierte Liste das Array richtig angezeigt.

    Was mache ich falsch?

    Danke.

  • Parameter $iOrder2 muss (wie $iOrder1) entweder $xlAscending oder $xlDescending sein.

  • Wie kann man dann die benutzerdefinierte Reihenfolge angeben?
    $xlAscending oder $xlDescending sortiert nicht wie gewünscht.
    Deshalb auch die vorgegebene Sortierreihenfolge.

  • Ops. Dann habe ich Deine Anforderung missverstanden. Die lässt sich leider nicht über das UDF umsetzen.
    Hast Du mal an einen COM error handler für Dein Skript gedacht um zu prüfen, ob irgendwo ein Fehler auftritt?

  • So, COM Error Handler eingebaut.

    Bei $vWorksheet.Sort.CustomOrder = $SortNum + 1 bekomme ich die Meldung "unbekannter Name".
    Es muß auch OrderCustom heißen anstatt CustomOrder. Aber trotzdem kommt die Meldung "unbekannter Name".

    Weiter kommt die Meldung auch hier.
    $vWorksheet.Sort.DataOption = 0

    Aber wo mein Fehler liegt weiß ich trozdem nicht.

    Vielen Dank für eure Hilfe.

  • So wie es aussieht,sollte CustomOrder der 4. Parameter für

    Code
    $vWorksheet.Sort.SortFields.Add(...)

    sein.
    https://msdn.microsoft.com/en-us/library/…office.14).aspx

  • Hi,

    danke, dass war der super Tipp.
    Es funktioniert jetzt wie es soll.
    Zuerst Spalte A und dann Spalte B nach Liste. Cool!

    Und die benuterdefinierte Liste darf kein Array sein.
    Weiter ist dies auch nicht notwendig:
    $oExcel.AddCustomList($aSortArray)

    Das funktionierende Script:


    :thumbup:

  • :)