Calc: Makro für AutoFilter

Antwort erstellen


BBCode ist eingeschaltet
[img] ist ausgeschaltet
[url] ist eingeschaltet
Smileys sind ausgeschaltet

Die letzten Beiträge des Themas
   

Ansicht erweitern Die letzten Beiträge des Themas: Calc: Makro für AutoFilter

Re: Calc: Makro für AutoFilter

von TrueColor » Di, 13.05.2014 08:16

Das hat mir geholfen. Vielen Dank!

Re: Calc: Makro für AutoFilter

von F3K Total » Mo, 12.05.2014 20:00

Hi,
es gibt die Eigenschaft removebyindex nicht.
mit diesem Makro kannst du die Namen zum Index auslesen, und dann entscheiden welchen Bereich du löschen möchtest:

Code: Alles auswählen

Sub Show_Databaseranges
    dim oRanges as Object
    dim i as integer
    dim sRangename as String
    oRanges = Thiscomponent.DatabaseRanges
    for i = 0 to ubound(oRanges.ElementNames)
        sRangename = oRanges.elementNames(i)
        msgbox "Index: " & i & "  -> Name: " & sRangename
    next i
end sub
    
HTH R

Re: Calc: Makro für AutoFilter

von TrueColor » Mo, 12.05.2014 10:18

F3K Total hat geschrieben:du mußt darauf achten, das die Indizes der RangeAddress bei 0 (Null) beginnen.
Das stimmt, das hatte ich nicht beachtet. Aber das ändert zwar den Bereich, wird jedoch in meiner Testdatei nirgendwo weiterverarbeitet wird, somit passiert da nix. Exception (AOO) und Absturz (LibO) bleiben bestehen.

Hab jetzt noch etwas rumprobiert. Die Lösung ist: zuerst den Autofilter ausschalten und dann die DatabaseRange removen. Dann kann man schön wechseln, genau wie ich's mir vorgestellt hab.

Ich hab aber wohl noch irgendwie ne Leiche drin. Wie kann man eine DatabaseRange removen, ohne dass ich den Namen kenne? Hab da in der API-Doc nichts gefunden.
http://www.openoffice.org/api/docs/comm ... anges.html

Danke!
Dateianhänge
test2.ods
(14.81 KiB) 135-mal heruntergeladen

Re: Calc: Makro für AutoFilter

von F3K Total » So, 11.05.2014 01:13

Hi,
du mußt darauf achten, das die Indizes der RangeAddress bei 0 (Null) beginnen.
Dies funzt unter AOO401:

Code: Alles auswählen

sub Autofilter_neu_C2F100
    dim oRange as Object
    oRange = ThisComponent.CurrentController.ActiveSheet.getCellRangeByPosition(2, 1, 5, 99).getRangeAddress()
    Thiscomponent.DatabaseRanges.addNewByName("Range_C2F100", oRange)
    Thiscomponent.DatabaseRanges.getByName("Range_C2F100").AutoFilter = True
end sub
Gruß R

Re: Calc: Makro für AutoFilter

von TrueColor » Fr, 09.05.2014 12:51

Hallo,

ich habe mal den alten Thread ausgegraben, da ich das 1:1 umsetzen wollte.
Stephan hat geschrieben:Jedenfalls funktioniert z.B.:

Code: Alles auswählen

oRange = Thiscomponent.Sheets(0).getCellRangeByPosition(0, 0, 3, 12).getRangeAddress()
Thiscomponent.DatabaseRanges.addNewByName( "myRange", oRange )
Thiscomponent.DatabaseRanges.getByName("myRange").AutoFilter=true
bei mir ohne Probleme.
Wurde hier inzwischen was geändert, so dass das nicht mehr fkt.? Oder hab ich beim Übernehmen etwas übersehen? AOO bringt eine RuntimeException, LibO stürtzt ab und geht in die Wiederherstellung.

Es geht um die letzten beiden Subs und die beiden blauen Buttons.

Weiß wer einen Rat?
Danke!
Dateianhänge
test_20140509.ods
(13.34 KiB) 130-mal heruntergeladen

Re: Calc: Makro für AutoFilter

von Stephan » Di, 24.04.2012 21:05

Eigentlich logisch
unlogisch nur wenn man eine richtige LÖsung genannt bekommt, diese augenscheinlich dann selbst so abändert das sie nicht funktioniert und dann hier im Forum nachfragt warum sie nicht funktioniert ohne seine eigene Abänderung zu erwähnen ...



Stephan

Re: Calc: Makro für AutoFilter

von HansMaulwurf » Di, 24.04.2012 15:02

Ok, nach noch einer Stunde rumprobieren, lag es letztendlich daran, dass ich nachdem ich den AutoFilter gesetzt habe, den DatenBereich wieder gelöscht habe. Das darf man natürlich nicht tun, wenn man genau diesen Bereich zum Filtern benutzt. Also einfach .DatabaseRanges.removeByName auskommentiert und schon funktioniert alles. Eigentlich logisch, aber manchmal hat man eben ein Brett vorm Kopf ;)
Ich danke euch trotzdem.

Re: Calc: Makro für AutoFilter

von balu » Di, 24.04.2012 14:27

Hallo

@Stephan
Ich habe in OOo 3.2.1 & 3.3.0 deinen Code getestet, und keine Probleme festgestellt. Ja selbst das "Text-Datum" macht keine schwierigkeiten.


@Hans
Bleibt dir nix anderes übrig als wie schon von Stephan angesprochen, eine Beispieldatei anzuhängen.



Gruß
balu

Re: Calc: Makro für AutoFilter

von Stephan » Di, 24.04.2012 14:11

Und ja, es funktioniert auch, es gibt keinen Fehler. Allerdings sieht das Dropdown-Menü dann "nur" so aus:
Zumindest bezeichne ich das Verhalten das nichts in der Filterliste steht als Fehler oder dachtest Du etwa bei mir käme bloß kein Laufzeitfehler? Ja, bei mir stehen Werte in der Liste.

Schade das Du nur eine Screenshoot zur Verfügung stellst statt eine Beispieldatei, denn so muß man wieder mutmaßen statt das man konkrete Auskünfte geben könnte.

Mußmaßlich sind die im Screenshot sichtbaren Datumswerte garkeine Datumswerte sondern Text, mußmaßlich dadurch bedingt das in den entsprechenden Zelleinträgen ein Hochkomma vorangestellt ist. Evtl. hilft notfalls (weil es ja auch direkt gehen muß) die Änderung dieser einträge auf richtige DAtumswerte statt Text.

Leider finde ich auf die Schnelle auch keine Lösung, wobei ich geglaubt hätte es könnte mit .isNumeric von "com.sun.star.sheet.TableFilterField" zu tun haben nur kann ich da keine Abhängigkeit der Listeneintäge feststellen.

Ich kann momentan somit nicht weiterhelfen.


Gruß
Stephan

Re: Calc: Makro für AutoFilter

von HansMaulwurf » Di, 24.04.2012 12:46

Code: Alles auswählen

oVorlage = StarDesktop.loadComponentFromURL("private:factory/scalc", "_blank", 0, args())
Das ist oVorlage ;) Nichts besonderes. Also auch nichts anderes als thisComponent bei dir.
Und oWorkingSheet ist einfach nur eine Tabelle, ein Arbeitsblatt, also so wie bei dir thisComponent.Sheets(0).
Und ja, es funktioniert auch, es gibt keinen Fehler. Allerdings sieht das Dropdown-Menü dann "nur" so aus:
autoFilter.jpg
autoFilter.jpg (21.5 KiB) 5021 mal betrachtet
Ich will aber, dass ich dort "12.04.2012" und "13.04.2012" zur Auswahl habe. Irgendwie muss es ja möglich sein, da OOo es ja selber macht, wenn ich über Daten->Filter->Autofilter auswähle. Ich hoffe mich versteht jemand ^^

Re: Calc: Makro für AutoFilter

von Stephan » Di, 24.04.2012 11:55

Hat einer nen Tipp für mich?
Ja, poste einen VOLLSTÄNDIGEN Code wenn Du eine sinnvolle Antwort willst. Woher soll hier im Forum jemand z.B. wissen was sich bei Dir hinter der Objektvariable oVorlage verbirgt?

Jedenfalls funktioniert z.B.:

Code: Alles auswählen

oRange = Thiscomponent.Sheets(0).getCellRangeByPosition(0, 0, 3, 12).getRangeAddress()
Thiscomponent.DatabaseRanges.addNewByName( "myRange", oRange )
Thiscomponent.DatabaseRanges.getByName("myRange").AutoFilter=true
bei mir ohne Probleme.



Gruß
Stephan

Calc: Makro für AutoFilter

von HansMaulwurf » Di, 24.04.2012 11:01

Hallo :)

ich versuche seit Tagen mit meinem Makro den AutoFilter zu setzen, und zwar so, wie es OOo selber macht, wenn man es im Menü auswählt. Bisher bin ich so weit gekommen, dass es mir die Pfeile anzeigt, jedoch ist das Dropdown-Menü (mit dem man ja dann die Tabelle filtern kann) leer.

Code: Alles auswählen

oRange = oWorkingSheet.getCellRangeByPosition(0, 0, iiSpalten, iiZeilen).getRangeAddress()
 oVorlage.DatabaseRanges.addNewByName( "myRange", oRange )
oVorlage.DatabaseRanges.getByName("myRange").AutoFilter=true
oVorlage.DatabaseRanges.removeByName("myRange")
Hab schon viel mit FilterDescriptor rumgespielt, bin jedoch nicht an den Punkt gekommen, an dem OOo den Filter "einfach automatisch ausfüllt".
Hat einer nen Tipp für mich?

mfg
Hans

Nach oben