Werte aus Tabelle mittels Makros filtern und ausgeben

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: Werte aus Tabelle mittels Makros filtern und ausgeben

Re: Werte aus Tabelle mittels Makros filtern und ausgeben

von hoover » Mi, 23.12.2009 15:17

Vielen Dank!
Hat alles super geklappt.
Danke, schöne Weihnachten!
Liebe Grüße

Re: Werte aus Tabelle mittels Makros filtern und ausgeben

von Charly » Mi, 23.12.2009 14:04

Hallo!

Bei mir hat das mit der Nummer 108 funktioniert. Aber wie schon erwähnt, gibt es beim Nummernformat unterschiedliche Nummern, durch die es bei der Zuweisung zu Problemen kommen kann.
Ich habe mal in den Code die lange Version eingefügt, bei der das Makro den NummernformatCode selbst sucht. Wenn er kein entsprechendes Format findet, erzeugt er sich selbst einen Code. Vielleicht funktioniert es so bei dir.

Code: Alles auswählen

Sub FilterAusgabeInNeuerTabelle()
Dim Dok as Object
Dim Blatt as Object
Dim Bereich as Object
Dim Endspalte as long
Dim Endzeile as long
Dim Filterarray(0)
DIM Zielblatt as Object
Dim Zelle as Object
Dim objNummerFormat as object
Dim strNummerFormat as String
Dim lngNummerFormatId as long
Dim objLocalSettings as New com.sun.star.lang.Locale

Dok = ThisComponent

'Zielblatterstellen
If Dok.sheets.hasByName("Ergebnis") then
Dok.sheets.removeByName("Ergebnis")
end if
Dok.sheets.insertNewByName("Ergebnis",0)
Zielblatt = Dok.sheets.getByName("Ergebnis")
Ziel = Zielblatt.getCellRangeByName("A1")

'Datenbereich definieren
Blatt = Dok.getsheets().getbyName("Daten")
Cursor = Blatt.createCursor()
Cursor.gotoEndOfUSEDArea(True)

EndSpalte = Cursor.getRangeAddress().EndColumn
EndZeile = Cursor.getRangeAddress().Endrow

Bereich = Blatt.getCellRangeByPosition(0,0,Endspalte,Endzeile)

'Filterobjekt mit Einstellungen erstellen
oFilterBeschreib = Bereich.createFilterDescriptor(True)
oFilterBeschreib.ContainsHeader = false
oFilterBeschreib.UseRegularExpressions = True
oFilterBeschreib.isCaseSensitive = false
oFilterBeschreib.CopyOutputData = true
oFilterBeschreib.OutputPosition = Ziel

Filterfeld = createUnoStruct("com.sun.star.sheet.TableFilterField")

Filterfeld.operator = com.sun.star.sheet.FilterOperator.EQUAL

Filterfeld.StringValue = "[1,2,3]" 
Filterfeld.field = 5
FilterArray(0) = Filterfeld

oFilterBeschreib.setFilterFields(FilterArray)
Bereich.filter(oFilterBeschreib)

'das Numberformat suchen bzw. ein neues bei nicht vorhanden erzeugen
objLocalSettings.Language = "de"
objLocalSettings.Country = "DE"
objNummerFormat = Dok.NumberFormats
strNummerFormat = "0,000"

lngNummerFormatId = objNummerFormat.queryKey(strNummerFormat,objLocalSettings, True)

If lngNummerFormatId = -1 then
   lngNummerFormatId = objNummerFormat.addNew(strNummerFormat, objLocalSettings)
End if

'Ergebnisblatt bearbeiten

Cursor = ZielBlatt.createCursor()
Cursor.gotoEndOfUSEDArea(True)

EndSpalte = Cursor.getRangeAddress().EndColumn
EndZeile = Cursor.getRangeAddress().Endrow

For I = 1 to Endzeile
Zelle = Zielblatt.getCellByPosition(3,I)
Betrag = Zelle.value/100 + 4000000
Zelle.value = Betrag
Zelle.numberformat = lngNummerFormatId

Zelle = Zielblatt.getCellByPosition(4,I)
Betrag = Zelle.value/100 + 5000000
Zelle.value = Betrag
Zelle.numberformat = lngNummerFormatId

next
End Sub 
Gruß
Charly

Re: Werte aus Tabelle mittels Makros filtern und ausgeben

von hoover » Mi, 23.12.2009 13:16

Hallo Charly


es funktioniert leider nicht so wie Du gedacht hast, aber wenn man in eine Zeile reinklickt und diese formatiert wird die Formatierung für die anderen übernommen.
Woran könnte das liegen

Gruß Hoover

Re: Werte aus Tabelle mittels Makros filtern und ausgeben

von Charly » Mi, 23.12.2009 09:51

Hallo!

Der Vorschlag von Karolus ist gut, die Nummer des Numberformat aus einer formatierten Zelle auszulesen. Ich habe die Erfahrung gemacht, dass die Nummer bei unterschiedlichen Systemen variieren. Bei mir bin ich auf den Nummerncode 108 gekommen. Wenn für die gewünschte Formatierung ein Code existiert und man diesen weiß, ist einfach die Formatierung in ein Makro auch ohne Aufzeichnung einzubauen.

Hier das Teilmakro:

Code: Alles auswählen

For I = 1 to Endzeile
Zelle = Zielblatt.getCellByPosition(3,I)
Betrag = Zelle.value/100 + 4000000
Zelle.value = Betrag
Zelle.numberformat = 108
Zelle = Zielblatt.getCellByPosition(4,I)
Betrag = Zelle.value/100 + 5000000
Zelle.value = Betrag
Zelle.numberformat = 108
next
Gruß
Charly

Re: Werte aus Tabelle mittels Makros filtern und ausgeben

von Karolus » Mi, 23.12.2009 08:40

Hallo Damuscheng85 oder hoover oder wer auch immer

Mit
msgbox thisComponent.currentselection().numberformat
könntest du den Formatindex der aktuellen Zelle auslesen....

Gruß Karo

Re: Werte aus Tabelle mittels Makros filtern und ausgeben

von hoover » Mi, 23.12.2009 08:12

Hallo Charly,

danke, dass du Dich der Sache so schnell angenommen hast.
Es funktioniert wunderbar!
Vielen, vielen Dank!

Hättest Du evtl noch einen Tip zur Formatierung wie man sich die ergebnisse 3 Stellig nach dem Komma anzeigen lassen kann??

Habs über den Makrorekorder versucht die Formatierung aufzuzeichnen, ging aber irgendwie nicht.
Über number format value
value = 107 sollte es gehen meine ich, ging aber nicht

Re: Werte aus Tabelle mittels Makros filtern und ausgeben

von Charly » Mi, 23.12.2009 07:57

Hallo Hoover!

Ich habe den Code ergänzt.

Code: Alles auswählen

Sub FilterAusgabeInNeuerTabelle()
Dim Dok as Object
Dim Blatt as Object
Dim Bereich as Object
Dim Endspalte as long
Dim Endzeile as long
Dim Filterarray(0)
DIM Zielblatt as Object
Dim Zelle as Object

Dok = ThisComponent

'Zielblatterstellen
If Dok.sheets.hasByName("Ergebnis") then
Dok.sheets.removeByName("Ergebnis")
end if
Dok.sheets.insertNewByName("Ergebnis",0)
Zielblatt = Dok.sheets.getByName("Ergebnis")
Ziel = Zielblatt.getCellRangeByName("A1")


'Datenbereich definieren
Blatt = Dok.getsheets().getbyName("Daten")
Cursor = Blatt.createCursor()
Cursor.gotoEndOfUSEDArea(True)


EndSpalte = Cursor.getRangeAddress().EndColumn
EndZeile = Cursor.getRangeAddress().Endrow


Bereich = Blatt.getCellRangeByPosition(0,0,Endspalte,Endzeile)


'Filterobjekt mit Einstellungen erstellen
oFilterBeschreib = Bereich.createFilterDescriptor(True)
oFilterBeschreib.ContainsHeader = false
oFilterBeschreib.UseRegularExpressions = True
oFilterBeschreib.isCaseSensitive = false
oFilterBeschreib.CopyOutputData = true
oFilterBeschreib.OutputPosition = Ziel


Filterfeld = createUnoStruct("com.sun.star.sheet.TableFilterField")


Filterfeld.operator = com.sun.star.sheet.FilterOperator.EQUAL

Filterfeld.StringValue = "[1,2,3]" 
Filterfeld.field = 5
FilterArray(0) = Filterfeld


oFilterBeschreib.setFilterFields(FilterArray)
Bereich.filter(oFilterBeschreib)

'Ergebnisblatt bearbeiten

Cursor = ZielBlatt.createCursor()
Cursor.gotoEndOfUSEDArea(True)

EndSpalte = Cursor.getRangeAddress().EndColumn
EndZeile = Cursor.getRangeAddress().Endrow

For I = 1 to Endzeile
Zelle = Zielblatt.getCellByPosition(3,I)
Betrag = Zelle.value/100 + 4000000
Zelle.value = Betrag

Zelle = Zielblatt.getCellByPosition(4,I)
Betrag = Zelle.value/100 + 5000000
Zelle.value = Betrag

next
End Sub 
Gruß
Charly

Re: Werte aus Tabelle mittels Makros filtern und ausgeben

von hoover » Mi, 23.12.2009 07:14

Hallo nochmal,

hätte da noch ein kleines Problem bzw. Anliegen. Ich möchte da jetzt niemanden überstapazieren aber es gäbe da noch eine Kleinigkeit.

Nachdem alles gefiltert ist und in eine neue Tabelle gekommen ist müsste mit den Werten in Spalte 4 und 5 noch eine Operation durchgeführt werden. Sie sollen durch hundert geteilt werden, die in spalte 4 anschließend plus 4000000 die in 5 plus 5000000 und dann angezeigt werden

Danke

Re: Werte aus Tabelle mittels Makros filtern und ausgeben

von hoover » Di, 22.12.2009 14:14

Hallo
Danke! Super es klappt!
Vielen Dank an Karo und Charly


Gruß Hoover

Re: Werte aus Tabelle mittels Makros filtern und ausgeben

von Charly » Di, 22.12.2009 14:13

Hallo!

Ich habe den Fehler schon gefunden. In meiner Beispielsdatei habe ich mit Überschrift gearbeitet, während du in deiner Datei keine Überschrift hast. Das bedeutet mit meinem Code wird die erste Zeile nicht gefiltert.

Du musst folgenden Code:

Code: Alles auswählen

oFilterBeschreib.ContainsHeader = True
umwandeln in

Code: Alles auswählen

oFilterBeschreib.ContainsHeader = False
Gruß
Charly

Re: Werte aus Tabelle mittels Makros filtern und ausgeben

von Karolus » Di, 22.12.2009 14:11

Hallo
Ändere im Makrocode die Zeile:
oFilterBeschreib.ContainsHeader = True
auf:
oFilterBeschreib.ContainsHeader = false

Gruß Karo

Re: Werte aus Tabelle mittels Makros filtern und ausgeben

von hoover » Di, 22.12.2009 14:05

Also das hier ist die Datei

Ich bin jetzt auch registriert(Deshalb statt h00ver --> hoover)

Re: Werte aus Tabelle mittels Makros filtern und ausgeben

von Charly » Di, 22.12.2009 14:00

Hallo!

Ich verwende als Filterkriterium einen regulären Ausdruck: [1,2,3]. Jetzt habe ich im ersten Moment gedacht, das Makro erkennt in der 1 an der Zehnerposition ein erfülltes Filterkriterium. Aber bei mir wird die Ziffer 10 nicht angezeigt.
Ich bin jetzt ein bisschen ratlos, warum die 10 angezeigt wird.

Nachdem der übrige Teil des Filters funktioniert hat, gehe ich davon aus, dass du in den Extra -Optionen - Calc - Berechnen eingestellt hast: reguläre Ausdrücke in Formeln ermöglichen.

Vielleicht ladest du die Datei, in der du das Verhalten festgestellt hast zur Gegenprobe hoch.

Gruß
Charly

Re: Werte aus Tabelle mittels Makros filtern und ausgeben

von Charly » Di, 22.12.2009 13:24

Hallo!

Ich habe ein Makro mit deinen Angaben geschrieben. Vielleicht passt es so!

Gruß
Charly
Dateianhänge
FilterInNeuerTabelle.ods
(10.65 KiB) 516-mal heruntergeladen

Nach oben