Filtern, Macro aufgezeichnet, beim ausführen keine Aktion

Das Tabellenkalkulationsprogramm

Moderator: Moderatoren

clag
********
Beiträge: 3570
Registriert: Di, 27.01.2009 15:30

Filtern, Macro aufgezeichnet, beim ausführen keine Aktion

Beitrag von clag »

Moin, moin,

ach ja, mal wieder ne Frage,

ich möchte eine Tabelle filtern, mit ' Menue-->Filter-->Spezialfilter--> '
dazu habe ich auf einem 2. Tabelleblatt einen "Suchbereich" und "Ausgabebereich" erstellt,
manuell ausgeführt funtioniert der Filter und die Ausgabe der gefilterten Daten in den Ausgabebereich auf das 2. Tabellenblatt.

Dann habe ich die Macroaufzeichnung gestartet und eine komplette Filteraktion aufgezeichnet,
vom platzieren des Cursor in der DatenTabelle in A1 bis zur Ausgabe der gefilterten Daten.
Das Macro habe ich unter " Meine Makros > Standard > Modul1 > suche1 " gespeichert.

Doch wenn ich das Macro ausführe passiert nichts :-(

Code: Alles auswählen

REM  *****  BASIC  *****

Sub Main

End Sub


sub suche1
rem ----------------------------------------------------------------------
rem define variables
dim document   as object
dim dispatcher as object
rem ----------------------------------------------------------------------
rem get access to the document
document   = ThisComponent.CurrentController.Frame
dispatcher = createUnoService("com.sun.star.frame.DispatchHelper")

rem ----------------------------------------------------------------------
dim args1(0) as new com.sun.star.beans.PropertyValue
args1(0).Name = "ToPoint"
args1(0).Value = "$A$1"

dispatcher.executeDispatch(document, ".uno:GoToCell", "", 0, args1())

rem ----------------------------------------------------------------------
rem dispatcher.executeDispatch(document, ".uno:DataFilterSpecialFilter", "", 0, Array())

rem ----------------------------------------------------------------------
dispatcher.executeDispatch(document, ".uno:FilterExecute", "", 0, Array())

rem ----------------------------------------------------------------------
dim args4(0) as new com.sun.star.beans.PropertyValue
args4(0).Name = "ToPoint"
args4(0).Value = "$A$35"

dispatcher.executeDispatch(document, ".uno:GoToCell", "", 0, args4())

rem ----------------------------------------------------------------------
dim args5(0) as new com.sun.star.beans.PropertyValue
args5(0).Name = "ToPoint"
args5(0).Value = "$A$8"

dispatcher.executeDispatch(document, ".uno:GoToCell", "", 0, args5())


end sub
der Code sieht auch nicht so toll aus, keine Zell-bezeichnung, Bezüge oder sonst was ??
(kann ich aber nicht wirklich beurteilen) von OO basic habe ich k.A.

Was mach ich falsch ?

ich möchte das Macro wenn es läuft auf einen Button legen, neben den Suchbereich
LG
clag

nutzt: WinXP SP3 / AOO 4.1.10 / Firefox
Charly
*****
Beiträge: 450
Registriert: Di, 20.01.2004 13:14
Wohnort: München

Re: Filtern, Macro aufgezeichnet, beim ausführen keine Aktion

Beitrag von Charly »

Hallo!

Für den Spezialfilter ist der Makrorekorder nicht geeignet. Man kann ihn aber mit normalem Basic programmieren.

Ich habe mir mal vor einiger Zeit ein Beispiel programmiert, das hier mal ins Netz stelle.

Code: Alles auswählen

Sub FilterSetzen

Dok = ThisComponent

'Datenbereich definieren
Blatt = Dok.getsheets().getbyName("Tabelle1")
Bereich = Blatt.getCellRangeByName("A1:B7")

'Filterkriterium definieren
oFilterBeschreib = Bereich.createFilterDescriptor(True)

Filterfeld = createUnoStruct("com.sun.star.sheet.TableFilterField")
Filterfeld.field = 1
Filterfeld.operator = com.sun.star.sheet.FilterOperator.EQUAL
Filterfeld.StringValue = "Treffer"

oFilterBeschreib.setFilterFields(Array(Filterfeld))

'Ausgabebereich definieren
oFilterBeschreib.CopyOutputData = True
Ziel = Blatt.getCellRangeByName("E2")
oFilterBeschreib.outputPosition = Ziel.CellAddress

'Filtern und Ausgabe der Daten
Bereich.filter(oFilterBeschreib)

End Sub
Du musst das natürlich noch für deine Bedürfnisse anpassen. Melde dich, wenn du noch Fragen hast.

Gruß
Charly
clag
********
Beiträge: 3570
Registriert: Di, 27.01.2009 15:30

Re: Filtern, Macro aufgezeichnet, beim ausführen keine Aktion

Beitrag von clag »

Hallo Charly,

na wenn es so ist, kann ich ja noch lange fummeln, i hab's mindestens 5 x versucht :lol:
leider sind meine OO basic Kenntnisse eher bescheiden, von daher muss ich wohl nochmal um Hilfe bitten.

die Daten stehen auf Tabellenblatt "Daten", Zeile1=Spaltenköpfe Daten= $A$1:$O$65536
-------------------------------
die Filterkriterien auf Tabellenblatt "suche" $suche.$A$2:$O$6

Groß-/Kleinschreibung = nein
Regulärer Ausdruck = ja
Keine Duplikate = nein
Persistent = ja
Filterergebnisse ausgeben nach = ja

der Ausgabebereich Tabellenblatt "suche" $suche.$A$10
-----------------------------------

das sind die Angaben wie in der Spezialfilter Dialogbox

zusätzlich müsste man noch vor der erneuten Ausgabe, den Ausgabebereich bereinigen (vorherige Ausgaben löschen)
also alles unterhalb "$suche.$A$10" da die Abfrage 1-100 Ergebnisse liefern kann.

mir ist noch etwas aufgefallen,
ich habe die Bereiche für die Filterkriterien und den Ausgabebereich benannt "such01" "list01".
im Spezialfilter Dialogbox kann ich aber nur für die Ausgabe einen benannten Bereich auswählen ?

sei doch so gut und setzt die fetten Werte in dein Beispiel ein,
bis zum "Datenbereich definieren" komm ich noch mit aber dann ........ :(

Code: Alles auswählen

Sub FilterSetzen

Dok = ThisComponent

'Datenbereich definieren
Blatt = Dok.getsheets().getbyName("Daten")
Bereich = Blatt.getCellRangeByName("A1:O65536")

'Filterkriterium definieren
oFilterBeschreib = Bereich.createFilterDescriptor(True)

Filterfeld = createUnoStruct("com.sun.star.sheet.TableFilterField")
Filterfeld.field = 1
Filterfeld.operator = com.sun.star.sheet.FilterOperator.EQUAL
Filterfeld.StringValue = "Treffer"

oFilterBeschreib.setFilterFields(Array(Filterfeld))

'Ausgabebereich definieren
oFilterBeschreib.CopyOutputData = True
Ziel = Blatt.getCellRangeByName("E2")
oFilterBeschreib.outputPosition = Ziel.CellAddress

'Filtern und Ausgabe der Daten
Bereich.filter(oFilterBeschreib)

End Sub
und schonmal Danke vorweg
LG
clag

nutzt: WinXP SP3 / AOO 4.1.10 / Firefox
Charly
*****
Beiträge: 450
Registriert: Di, 20.01.2004 13:14
Wohnort: München

Re: Filtern, Macro aufgezeichnet, beim ausführen keine Aktion

Beitrag von Charly »

Hallo Claq!


Ich werde mich heute abend dran machen, deine Angaben in das Makro einzubauen. Ich habe nur eine Frage zu den Filterkriterien. Gibt es immer nur ein Kriterium gleichzeitig oder können es auch mehrere sein. Das erfordert eine nämlich unterschiedliche Programmierung

Zum Thema benannte Bereiche möchte ich sagen, ich arbeite in meinen Makros nicht mit benannten Bereichen. Wenn die Größe der Tabelle nicht bekannt ist, kann man das vom Makro ermitteln lassen. Ein Makro kann aber auch benannte Bereich auslesen und verwenden. Siehe dazu viewtopic.php?f=18&t=22339


Gruß
Charly
clag
********
Beiträge: 3570
Registriert: Di, 27.01.2009 15:30

Re: Filtern, Macro aufgezeichnet, beim ausführen keine Aktion

Beitrag von clag »

Hallo Charly,

also deinen Feierabend wollte dir aber nicht vermiesen, also mach schön piano ...

Wegen eventueller UND Kriterien hatte ich 4 Zeilen für die Kriterien definiert,
darunter für den Ausgabebereich nur noch mal die Zeile mit Spaltenbeschriftung
als Ausgabebereich um darunter die Ausgabedaten zu schreiben.

also kein Stress :) bis denn
LG
clag

nutzt: WinXP SP3 / AOO 4.1.10 / Firefox
Charly
*****
Beiträge: 450
Registriert: Di, 20.01.2004 13:14
Wohnort: München

Re: Filtern, Macro aufgezeichnet, beim ausführen keine Aktion

Beitrag von Charly »

Hallo Claq!

Ich hänge unten ein Calc-Dokument an mit meinem ersten Entwurf. Hier ist im Moment nur ein Filterargument möglich. Bei mehreren Argumenten muss ich erst rumprobieren. Beim Spezialfilter ist meines Wissens so, dass Werte in der gleichen Zeile "Und" Werte sind, in verschiedenen Zeilen "Oder" Werte. Nachdem du sagst du brauchst "Und"-Werte werde ich erst diese versuchen.

Mein Makro kann über die Symbolleiste Button "FilterSetzen" gestartet werden. Der Quellbereich ist nicht fest hinterlegt, sondern das Makro ermittelt, welcher Bereich auf dem Datentabellenblatt benutzt ist. Wenn der Ausgabebereich, bereits mit Daten gefüllt, löscht er diese Daten zuerst.

Also schau dir mal das Zwischenergebnis an, ob das schon mal gut ist.


Gruß
Charly
Dateianhänge
Filter_setzen.ods
(17.4 KiB) 285-mal heruntergeladen
Charly
*****
Beiträge: 450
Registriert: Di, 20.01.2004 13:14
Wohnort: München

Re: Filtern, Macro aufgezeichnet, beim ausführen keine Aktion

Beitrag von Charly »

Hallo!

Hier kommt mein zweiter Entwurf. Jetzt kann er mehr Filterkriterien verarbeiten. Allerdings nur in "UND"-Verbindung. Beim "ODER" muss ich vermutlich ein Array aufbauen mit zwei Dimensionen. Aber das ist mir für heute Abend doch zu viel.


Gruß
Charly
Dateianhänge
Filter_setzen_V1.ods
(11.8 KiB) 224-mal heruntergeladen
clag
********
Beiträge: 3570
Registriert: Di, 27.01.2009 15:30

Re: Filtern, Macro aufgezeichnet, beim ausführen keine Aktion

Beitrag von clag »

Moin moin allerseits ......

Hallo Charly,

erstmal DANKE für deine Mühe

das Macro *V1 läuft jetzt schon schon ganz gut,
bei mir hier leider nur mit einem Wert im Filterbereich

ein UND Filter (mehre Kriterien in einer Zeile)
bzw ODER Filter (mehrere Kriterien untereinander in einer Spalte)
bringen noch keine Ergebnisse

auch verschluckt sich das Macro zZ an Operatoren vor den Werten, zB ">5" oder ".*text"
und bringt kein Ergebniss
ein "text.*" als Kriterium funktioniert allerdings

versteh dieses "funzt ja gar nicht richtig" bitte nicht als Kritik an deinem tun,
es ist nur der Bericht über meine Versuche mit dem Macro.....

ich bin ja heilfroh das du mir so intensiv hilfst ! :D
LG
clag

nutzt: WinXP SP3 / AOO 4.1.10 / Firefox
Charly
*****
Beiträge: 450
Registriert: Di, 20.01.2004 13:14
Wohnort: München

Re: Filtern, Macro aufgezeichnet, beim ausführen keine Aktion

Beitrag von Charly »

Hallo Claq!

Die Version V1 schaut sich nur die Kriterien in Zeile 2 des Tabellenblattes "Suche" an. Die Und-Funktion funktioniert dabei bei mir. Die Oder-Funktion habe ich noch nicht verwirklicht und kann deshalb nicht funktionieren.

Filter mit regulären Ausdrücken wie: .*Text oder [6-9] funktionieren bei mir auch.

>5 kann nicht funktionieren. Denn das müsste ich erst mit dem Makro abfragen und dann im FilterOperator statt "EQUAL" "GREATER" hinterlegen. Das muss ich erst noch programmieren.

Ich hänge nochmals die alte Version an mit neuen Testdaten. Alles weitere später

Gruß
Charly
Dateianhänge
Filter_setzen_V1.ods
(11.22 KiB) 186-mal heruntergeladen
clag
********
Beiträge: 3570
Registriert: Di, 27.01.2009 15:30

Re: Filtern, Macro aufgezeichnet, beim ausführen keine Aktion

Beitrag von clag »

Hallo Charly,

ich habe aus deiner Datei den Macrocode kopiert und in meine Tabelle eingefügt, damit ich sehe wie es mit meinen Daten funktioniert.

als Textfilter funktioniert jetzt alles ".text.*" ".*text" ".*text.*"
Zahlenfilter funktioniert auch bei einer einfachen Zahl

wenn ich aber zB in Spalte K nach 20 suche bekomme ich ca50 Ergebnisse, die in Spalte D verschiedene Namen haben (ua auch 3 Namen die mit B beginnen),
setze ich nun zusätzlich in Spalte D noch ein "B.*" dann werden aber alle B.* als Ergebnis geliefert (über500), egal welcher wert in Spalte K steht
erwarten würde ich aber nur die 3 Ergebnisse die in Spalte D="B.*" UND Spalte K="3" WAHR ergeben.
Charly hat geschrieben:Die Und-Funktion funktioniert dabei bei mir
was gibst du dazu wo ein ?
Charly hat geschrieben:Filter mit regulären Ausdrücken wie: .*Text oder [6-9] funktionieren bei mir auch.
wenn ich zb "[20-28]" in Spalte K eingebe bekomme ich alle Datensätze angezeigt die <8 sind ?
Charly
*****
Beiträge: 450
Registriert: Di, 20.01.2004 13:14
Wohnort: München

Re: Filtern, Macro aufgezeichnet, beim ausführen keine Aktion

Beitrag von Charly »

Hallo Clag!

Das mit den regulären Ausdrücken ist eine Wissenschaft für sich. In der OpenOffice Hilfe zu Calc gibt es dazu eine Liste. Ich bin darin auch nicht firm.

Der Ausdruck [20-28] bedeutet jedenfalls nicht, dass er Zahlen zwischen 20 und 28 sucht, sondern dass er die Zeichen 2, 0,1,2 und 8 sucht.

Die Und-Funktion kommt dadurch zustande, dass ich die Kriterien in die dazugehörige Spalte, aber gleiche Zeile schreibe. Dabei nicht vergessen, die letzte Eingabe mit "Enter" abzuschließen, sonst ist diese Zelle im Schreibmodus und das Makro kann sie nicht auslesen. Um die Unterschiede zu deiner Version zu klären, müsstes du vielleicht eine Beispieldatei ins Netz stellen.

Die Oder-Funktion habe ich, glaube ich, gelöst. Die Verarbeitung des Operators Größer oder Kleiner auch. Der Von - bis Wunsch bereitet mir noch Probleme.
Die Oder-Funktion kommt zustande, wenn die Kriterien in verschiedene Zeilen stehen. Hier wirft also jede Zeile für sich ein Ergebnis aus.

Anbei Version 2. Achtung: Ich habe das Makro in Teil-Sub aufgeteilt. Ich hätte bald die Übersicht verloren.

Gruß
Charly
Dateianhänge
Filter_setzen_V2.ods
(11.94 KiB) 337-mal heruntergeladen
clag
********
Beiträge: 3570
Registriert: Di, 27.01.2009 15:30

Re: Filtern, Macro aufgezeichnet, beim ausführen keine Aktion

Beitrag von clag »

Hallo Charly,

mit dieser Macro-Version funktionieren scheinbar alle Filteraufgaben wie gewünscht,
ich habe schon etliche UND und ODER Abfragen gestartet und bisher für alle eine mir logische Ausgabe erhalten !

Respekt dem Macro Coder :D
Charly hat geschrieben:Der Ausdruck [20-28] bedeutet jedenfalls nicht, dass er Zahlen zwischen 20 und 28 sucht, sondern dass er die Zeichen 2, 0,1,2 und 8 sucht.
das muß nem OOoDAU wie mir erst mal gesagt werden :lol: , dann ist auch die Ausgabe verständlich.
Charly hat geschrieben:Der Von - bis Wunsch bereitet mir noch Probleme.
muss nicht sein, ich hatte nur geglaubt du meintest das mit [6-9]

Im Moment sieht es so aus als wenn alles so tut wie ich es mir gedachte hatte !!
da bleibt mir erstmal nur noch, Dir vielen Dank zu sagen und ein relaxtes Wochenende zu Wünschen .

bis zum nächsten "wie geht den das"

edit: ähm.. eine Frage hät ich doch noch,
was muß ich im Macro ändern, damit die Filterkriterien nicht bei "Suche A1" sondern bei "Suche B1" beginnen, um noch eine Überschrift darüber platzieren zu können?
Zuletzt geändert von clag am Fr, 30.01.2009 16:25, insgesamt 1-mal geändert.
LG
clag

nutzt: WinXP SP3 / AOO 4.1.10 / Firefox
Karolus
********
Beiträge: 7532
Registriert: Mo, 02.01.2006 19:48

Re: Filtern, Macro aufgezeichnet, beim ausführen keine Aktion

Beitrag von Karolus »

Hallo clag
Falls du doch mal den Ausdruck für '20 bis 28' suchst: 2[0-8]

Gruß Karo
LO7.4.7.2 debian 12(bookworm) auf Raspberry5 8GB (ARM64)
LO25.2.3.2 flatpak debian 12(bookworm) auf Raspberry5 8GB (ARM64)
clag
********
Beiträge: 3570
Registriert: Di, 27.01.2009 15:30

Re: Filtern, Macro aufgezeichnet, beim ausführen keine Aktion

Beitrag von clag »

Hi Karolus,

danke für den Tip

funktioniert auch in der Filterabfrage :D

aber verinnerlicht habe ich das Prinzip noch nicht,
vielleicht kannst du mir noch etwas auf die Sprünge helfen
wie würde denn zB 20-50, 3-8 oder 100-200 aussehen ?
LG
clag

nutzt: WinXP SP3 / AOO 4.1.10 / Firefox
Karolus
********
Beiträge: 7532
Registriert: Mo, 02.01.2006 19:48

Re: Filtern, Macro aufgezeichnet, beim ausführen keine Aktion

Beitrag von Karolus »

Hallo
wie würde denn zB 20-50, 3-8 oder 100-200 aussehen ?
[2-4][0-9]|50
[3-8]
1[0-9][0-9]|200
Der | steht für dies oder das.

Gruß Karo
LO7.4.7.2 debian 12(bookworm) auf Raspberry5 8GB (ARM64)
LO25.2.3.2 flatpak debian 12(bookworm) auf Raspberry5 8GB (ARM64)
Antworten