Writer: Makro "Tabelle sortieren nach Spalte 2"

Moin.

Eine Verwandte bat mich um eine Vereinfachung des Sortierens einer
Tabelle.

"Tabelle > Auswählen > Tabelle"
"Tabelle > Sortieren > Spalte 2 > Richtung: Zeilen > Schlüsseltyp:
Alphanumerisch > Reihenfolge: Aufsteigend"

Ich habe es kurz mit dem Makrorekorder versucht. Aber dabei kommt nix
Verwertbares heraus.

Kennt jemand eventuell eine Erweiterung, die passende Befehle enthält?
Oder schüttelt jemand so ein Makro aus dem Ärmel und hat Lust das hier
zu teilen?
Es würde mich freuen.
Danke.

Aus Neugier:
Wird eigentlich an einem benutzbaren Makrorekorder gearbeitet oder
liegt das voerst auf Eis, weil es tausend andere Aufgaben gibt?

Andreas

Hallo Andreas,

das Aufzeichen der Macros kann auch verbessert werden. Aber Vorsicht eignet sich wahrscheinlich nur, wenn ich den alten Dispatcher nicht mehr brauche. Für Hobbyprogrammierer würde ich ihn nicht empfehlen. Kann nicht mehr Rückgängig gemacht werden.

Dafür gibt es eine schöne Extension
http://www.markmail.org/message/xnsnsm7balevnlej
es werden zwar nicht alle dispatch befehle in API -Befehle umgewandelt,
aber es ist schon mal ein Anfang.

Die Dateien hießen

http://www.paolo-mantovani.org/downloads/DispatchToApiRecorder/DispatchToApiRecorder-20060707.uno.pkg und
http://www.paolo-mantovani.org/downloads/DispatchToApiRecorder/transformers/Calc/CalcDispatchToApiTransformer-20060707.uno.pkg

Beide müssen installiert werden.

In Writer wird mir bei genau dem gleichen Problem dann angezeigt das ich eingeben soll was sortiert werden soll. Drum bin ich auch nicht so glücklich damit, weil zwar das markieren der Tabelle automatisiert wurde aber das sortieren an sich nicht weil ich noch keine Möglichkeit gefunden habe ählich der calc - Sortierung und dem alten Dispatcher in dem Makro zu sagen sortiere genau diese Spalte.

Gruß
Christian

Hallo Zusammen

Moin.

Eine Verwandte bat mich um eine Vereinfachung des Sortierens einer
Tabelle.

"Tabelle> Auswählen> Tabelle"
"Tabelle> Sortieren> Spalte 2> Richtung: Zeilen> Schlüsseltyp:
> Reihenfolge: Aufsteigend"

Ich habe es kurz mit dem Makrorekorder versucht. Aber dabei kommt nix
Verwertbares heraus.

Kennt jemand eventuell eine Erweiterung, die passende Befehle enthält?
Oder schüttelt jemand so ein Makro aus dem Ärmel und hat Lust das hier
zu teilen?

Ja ich bin gerade dabei.es wird heute noch fertig, aber ich möchte nichts halbfertiges hier veröffentlichen. deshalb mußt du dich noch etwas gedulden.
Wenn das Makro fertig ist, kann ich es auch zu einer Extension ausbauen, das braucht aber etwas länger.

Es würde mich freuen.
Danke.

Aus Neugier:
Wird eigentlich an einem benutzbaren Makrorekorder gearbeitet oder
liegt das voerst auf Eis, weil es tausend andere Aufgaben gibt?

Andreas

Hallo Andreas,

das Aufzeichen der Macros kann auch verbessert werden. Aber Vorsicht eignet sich wahrscheinlich nur, wenn ich den alten Dispatcher nicht mehr brauche. Für Hobbyprogrammierer würde ich ihn nicht empfehlen. Kann nicht mehr Rückgängig gemacht werden.

Dafür gibt es eine schöne Extension
http://www.markmail.org/message/xnsnsm7balevnlej
es werden zwar nicht alle dispatch befehle in API -Befehle umgewandelt,
aber es ist schon mal ein Anfang.

Die Dateien hießen

http://www.paolo-mantovani.org/downloads/DispatchToApiRecorder/DispatchToApiRecorder-20060707.uno.pkg und
http://www.paolo-mantovani.org/downloads/DispatchToApiRecorder/transformers/Calc/CalcDispatchToApiTransformer-20060707.uno.pkg

Beide müssen installiert werden.

In Writer wird mir bei genau dem gleichen Problem dann angezeigt das ich eingeben soll was sortiert werden soll. Drum bin ich auch nicht so glücklich damit, weil zwar das markieren der Tabelle automatisiert wurde aber das sortieren an sich nicht weil ich noch keine Möglichkeit gefunden habe ählich der calc - Sortierung und dem alten Dispatcher in dem Makro zu sagen sortiere genau diese Spalte.

Da kann ich dich trösten,
denn der original-Makro-Rekorder liefert da auch kein brauchbares Ergebnis.

Gruß Frieder

Frieder schrieb:

Kennt jemand eventuell eine Erweiterung, die passende Befehle enthält?
Oder schüttelt jemand so ein Makro aus dem Ärmel und hat Lust das hier
zu teilen?

Ja ich bin gerade dabei.es wird heute noch fertig, aber ich möchte
nichts halbfertiges hier veröffentlichen. deshalb mußt du dich noch
etwas gedulden.

Herzlichen Dank. :slight_smile:
Lass' Dir ruhig Zeit.

Wenn das Makro fertig ist, kann ich es auch zu einer Extension ausbauen,
das braucht aber etwas länger.

Ich glaube, ein Makro reicht. Aber falls es Dich selber reizt und Du
denkst, dass die Vereinfachung für mehrere Nutzer spannend ist, dann
freue ich mich auch über eine Erweiterung.

@Christian
Auch an Dich vielen Dank für Deine Antwort.
Aber mit Frieders Makro ist das Thema dann ja erledigt.

Andreas

Hallo Andreas

Herzlichen Dank. :slight_smile:
Lass' Dir ruhig Zeit.

Wenn das Makro fertig ist, kann ich es auch zu einer Extension ausbauen,
das braucht aber etwas länger.

Ich glaube, ein Makro reicht. Aber falls es Dich selber reizt und Du
denkst, dass die Vereinfachung für mehrere Nutzer spannend ist, dann
freue ich mich auch über eine Erweiterung.

Ich schau mal, ob ich dann noch Lust habe.

@Christian
Auch an Dich vielen Dank für Deine Antwort.
Aber mit Frieders Makro ist das Thema dann ja erledigt.

Andreas

Ich arbeite gerade daran, dass man einfach eine Zelle markiert, und dann auf einen Button (Absteigend oder Aufsteigend) klickt, und schon wird nach der Spalte sortiert, in der sich gerade der Cursor befindet.
Wenn ich damit fertig bin, ist es nicht mehr so viel Arbeit, daraus eine Extension zu machen.
Die Meiste Arbeit sind dann die kleinen Bildchen auf den Schaltflächen und ein Hilfe-Text.

Aber hier Das Makro:
einfach im sub "sortWriterTable" die Variablen anpassen und fertig.

Gruß Frieder

REM ***** BASIC *****
Option Explicit
'------------------------------
sub sortWriterTable
Dim sTableName As String
Dim bAscending As boolean
Dim bHeader As boolean
Dim nSortColl As Long

sTableName = "Tabelle1"
bAscending = True 'Aufsteigend Sortiert
bHeader = False 'Tabelle enthält kopfzeile
nSortColl = 1 'Spalte nach der sortiert werden soll (erte Spalte=1)

sort_Text_Table(sTableName,bAscending,bHeader,nSortColl)

end Sub

'--------------------------------------------
sub sort_Text_Table (sTableName As String,bAscending As boolean,bHeader As boolean, nSortColl As Long)
Dim oTable as Object
dim oRange as Object
Dim nStartRow As Long
Dim sRange As String
Dim oSortFields(0) as New com.sun.star.table.TableSortField
Dim oDescriptor As Variant

   oTable = ThisComponent.TextTables.getByName(sTableName)
     If bHeader Then
       nStartRow =1
     Else
       nStartRow =0
     End if

   sRange = GetTablerange(oTable,nStartRow)
   oRange = oTable.getCellRangeByName (sRange)

   oSortFields(0).Field = nSortColl
   oSortFields(0).IsAscending = bAscending
   oSortFields(0).FieldType = com.sun.star.util.SortFieldType.AUTOMATIC

   oDescriptor = oTable.createSortDescriptor()
   ' set descriptor's properties
   oDescriptor(0).Name = "IsSortInTable"
   oDescriptor(0).Value = True
   'oDescriptor(1).Name = "Delimiter"
   'oDescriptor(1).Value = True
   oDescriptor(2).Name = "IsSortColumns"
   oDescriptor(2).Value = False 'True
   'oDescriptor(3).Name = "MaxSortFieldsCount"
   'oDescriptor(3).Value = 2
   oDescriptor(4).Name = "SortFields"
   oDescriptor(4).Value = oSortFields()
   oRange.Sort(oDescriptor())

End sub
'-----------------------------------------------------------------
REM Returns the name of the sortrange
Function GetTablerange (oTable As Object, nStartRow As Long) As String

   Dim sCell As string
   Dim oCursor As Object

   sCell = oTable.getCellByPosition(0, nStartRow).CellName
   oCursor = oTable.createCursorByCellName (sCell)

   oCursor.gotoEnd (True)
   GetTablerange = oCursor.getRangeName

End Function

Frieder schrieb:

Ich arbeite gerade daran, dass man einfach eine Zelle markiert, und dann
auf einen Button (Absteigend oder Aufsteigend) klickt, und schon wird
nach der Spalte sortiert, in der sich gerade der Cursor befindet.

Interessante Bedienidee.

Anregung: Ich denke, dass es gut wäre, wenn die Bedienelemente
(Buttons) nicht in jeder Zelle zu finden wären, sondern allein in der
Kopfzeile.

Aber hier Das Makro:
einfach im sub "sortWriterTable" die Variablen anpassen und fertig.

Danke :slight_smile:

sTableName = "Tabelle1"

Erlaube bitte dazu eine Frage.
Funktioniert das Makro auch, wenn die Tabelle einen anderen Namen
trägt?
Es scheint mir wichtig zu sein, dass das Makro /jede/ Tabelle
behandeln kann.

Verstehe ich den Code richtig, dass das Makro die Tabelle nicht
markiert?

Andreas

Hallo Andreas

Die Extension ist fertig.
Hier der Link:
https://sites.google.com/site/starbasicmakros/extensions/writer-tabellen-sortieren

Frieder schrieb:

Ich arbeite gerade daran, dass man einfach eine Zelle markiert, und dann
auf einen Button (Absteigend oder Aufsteigend) klickt, und schon wird
nach der Spalte sortiert, in der sich gerade der Cursor befindet.

Interessante Bedienidee.

Anregung: Ich denke, dass es gut wäre, wenn die Bedienelemente
(Buttons) nicht in jeder Zelle zu finden wären, sondern allein in der
Kopfzeile.

Das hast du wohl falsch verstanden.
Die Bedienelemente sind überhaupt nicht in der Tabelle,
sondern oben in der Schaltelemente-Leiste von Writer.

Aber hier Das Makro:
einfach im sub "sortWriterTable" die Variablen anpassen und fertig.

Danke :slight_smile:

sTableName = "Tabelle1"

Erlaube bitte dazu eine Frage.
Funktioniert das Makro auch, wenn die Tabelle einen anderen Namen
trägt?

Dann musst du das entsprechend im Makro anpassen.
Doch mit der extension brauchst du das ja jetzt nicht mehr.

Es scheint mir wichtig zu sein, dass das Makro /jede/ Tabelle
behandeln kann.

Die Extension kann das.

Verstehe ich den Code richtig, dass das Makro die Tabelle nicht
markiert?

Ja das ist dazu ja auch nicht nötig.

Gruß Frieder

Frieder schrieb:

Die Extension ist fertig.
Hier der Link:
https://sites.google.com/site/starbasicmakros/extensions/writer-tabellen-sortieren

Whow. So fix. Herzlichen Dank.

Es scheint mir wichtig zu sein, dass das Makro /jede/ Tabelle
behandeln kann.

Die Extension kann das.

Verstehe ich den Code richtig, dass das Makro die Tabelle nicht
markiert?

Ja das ist dazu ja auch nicht nötig.

Fein.

Die Erweiterung funktioniert perfekt. Hab's bereits getestet.

Echt eine schöne Bereicherung. Noch bequemer und eleganter als ich es
mir durch ein Makro erhofft hatte.
Meine Verwandte wird sich freuen.
Und ich werde das auch gerne öfter nutzen.

Nochmal: Danke :slight_smile:

Andreas