Seite 1 von 2
Makro Fehlermeldung
Verfasst: Di 15. Okt 2024, 12:56
von kukur
Ich habe eine Tabelle mit ca. 100 Zeilen und 4 Spalten, die ich nach den Spalten 2 - 4 (numerisch) sortieren möchte. Wenn ich diese Sortierung in Einzelschritten (zuerst Tabelle markieren, dann; Tabelle - Sortieren ...) durchführe, klappt das problemlos. Wenn ich aber die gleichen Schritte als Makro aufzeichne und speichere, geht das zwar noch problemlos, beim Makro ausführen gibt es dann aber die Fehlermeldung: "BASIC-Syntaxfehler. Erwartet: Sub." Was lief da schief?
Re: Makro Fehlermeldung
Verfasst: Di 15. Okt 2024, 13:22
von karolus
kukur hat geschrieben: ↑Di 15. Okt 2024, 12:56
"BASIC-Syntaxfehler. Erwartet: Sub." Was lief da schief?
…das korrekte Abspeichern
nach der Aufzeichnung!?
und ausserdem bist du hier im falschen Unterforum … besser aufgehoben wäre das Thema in
Basic und Makro oder wenigstens
Calc
Re: Makro Fehlermeldung
Verfasst: Do 17. Okt 2024, 16:37
von kukur
Ich habe das Makro dort abgespeichert, wo es das Programm vorschlägt (siehe Anhang) und das so abgespeicherte Makro danach ausgeführt, was zur Fehlermeldung (siehe Anhang) geführt hat.
Re: Makro Fehlermeldung
Verfasst: Do 17. Okt 2024, 17:15
von karolus
kukur hat geschrieben: ↑Do 17. Okt 2024, 16:37
…
(siehe Anhang) …
(siehe Anhang) …
Nein Ich sehe ihn nicht!
Re: Makro Fehlermeldung
Verfasst: Do 17. Okt 2024, 17:23
von kukur
Sorry, das war ein Missgeschick. So sollte es klappen.
Re: Makro Fehlermeldung
Verfasst: Do 17. Okt 2024, 17:49
von karolus
Zeile 1: EM ⇒ REM
Re: Makro Fehlermeldung
Verfasst: Do 17. Okt 2024, 18:34
von kukur
Danke, das hat zunächst einmal geholfen, es gibt beim Befehl "Makro ausführen" keine Fehlermeldung mehr. Aber: wenn ich den Makro - der eine Tabelle nach drei Kriterien sortieren sollte - ausführe, erscheint einfach das Sortierfenster und ich muss den ganzen Sortierprozess von Hand eingeben.
Re: Makro Fehlermeldung
Verfasst: Do 17. Okt 2024, 19:11
von karolus
Das ist ja seltsam … Wenn ich ⇒ Daten ⇒ Sortieren …(mit drei Kriterien etcpp.) ausführe und
aufzeichne kommt was ganz anderes raus wie bei Dir, wie kann es sein das deine Aufzeichnung nicht funktioniert?
Code: Alles auswählen
sub Aufzeichnung_DAten_Sortieren_dialog
dim document as object
dim dispatcher as object
document = ThisComponent.CurrentController.Frame
dispatcher = createUnoService("com.sun.star.frame.DispatchHelper")
dim args2(13) as new com.sun.star.beans.PropertyValue
args2(0).Name = "ByRows"
args2(0).Value = true
args2(1).Name = "HasHeader"
args2(1).Value = true
args2(2).Name = "CaseSensitive"
args2(2).Value = false
args2(3).Name = "NaturalSort"
args2(3).Value = false
args2(4).Name = "IncludeAttribs"
args2(4).Value = true
args2(5).Name = "UserDefIndex"
args2(5).Value = 0
args2(6).Name = "Col1" '1.kriterium
args2(6).Value = 2 ' Spalte B…
args2(7).Name = "Ascending1"
args2(7).Value = true '…Aufsteigend
args2(8).Name = "Col2" '2. Kriterium
args2(8).Value = 1 'Spalt A…
args2(9).Name = "Ascending2"
args2(9).Value = true 'Aufsteigend
args2(10).Name = "Col3" '3. Kriterium
args2(10).Value = 3 'Spalte C
args2(11).Name = "Ascending3"
args2(11).Value = false 'Absteigend
args2(12).Name = "IncludeComments"
args2(12).Value = false
args2(13).Name = "IncludeImages"
args2(13).Value = true
dispatcher.executeDispatch(document, ".uno:DataSort", "", 0, args2())
end sub
Re: Makro Fehlermeldung
Verfasst: Do 17. Okt 2024, 20:14
von kukur
Vielleicht liegt es daran, dass ich die Tabelle im Writer (und nicht mit Calc) sortieren will. Also mit Extras > sortieren.
Ich bin ganz neu bei LibreOffice und dabei, von MS Office umzusteigen. In MS Word funktioniert dieser Makro einwandfrei auf Anhieb, aber ich habe verstanden, dass die Makros von MS Office nicht auf LibreOffice übertragbar sind, sondern dass man sie dort neu schreiben muss, und das scheint ja nun nicht auf Anhieb zu gehen.
Re: Makro Fehlermeldung
Verfasst: Do 17. Okt 2024, 21:27
von karolus
Hallo
Also doch in writer! … da stösst die Makro-Aufzeichnung an seine Grenzen.
Daher mal schnell zusammengehackt in python:
Code: Alles auswählen
def sort_writer_table(*_):
doc = XSCRIPTCONTEXT.getDocument()
sheet = doc.TextTables["Tabelle1"] #trag hier den Namen der Tabelle ein!
header, *data =sheet.DataArray # Kopfzeile ? nicht sortieren?
out = [ header ]
out.extend(sorted(data,
key=lambda row: (float(row[1]), #2te Spalte
float(row[2]), #3te Spalte
float(row[3])))) #4te Spalte
sheet.DataArray = out
sollte einigermassen selbsterklärend sein…
bei den Spalten die absteigend sortiert werden sollen, setzt du einfach ein -zeichen vor »float«
zum organisieren von python nimmst du am besten
apso.oxt von hier