Werte aus Tabelle mittels Makros filtern und ausgeben
Moderator: Moderatoren
Re: Werte aus Tabelle mittels Makros filtern und ausgeben
Hallo!
Ich habe ein Makro mit deinen Angaben geschrieben. Vielleicht passt es so!
Gruß
Charly
Ich habe ein Makro mit deinen Angaben geschrieben. Vielleicht passt es so!
Gruß
Charly
- Dateianhänge
-
- FilterInNeuerTabelle.ods
- (10.65 KiB) 516-mal heruntergeladen
Re: Werte aus Tabelle mittels Makros filtern und ausgeben
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
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
Also das hier ist die Datei
Ich bin jetzt auch registriert(Deshalb statt h00ver --> hoover)
Ich bin jetzt auch registriert(Deshalb statt h00ver --> hoover)
Zuletzt geändert von hoover am Di, 22.12.2009 14:13, insgesamt 1-mal geändert.
Re: Werte aus Tabelle mittels Makros filtern und ausgeben
Hallo
Ändere im Makrocode die Zeile:
oFilterBeschreib.ContainsHeader = True
auf:
oFilterBeschreib.ContainsHeader = false
Gruß Karo
Ändere im Makrocode die Zeile:
oFilterBeschreib.ContainsHeader = True
auf:
oFilterBeschreib.ContainsHeader = false
Gruß Karo
LO7.4.7.2 debian 12(bookworm) auf Raspberry4b 8GB (64bit)
LO24.8.2.1 flatpak debian 12(bookworm) auf Raspberry4b 8GB (64bit)
LO24.8.2.1 flatpak debian 12(bookworm) auf Raspberry4b 8GB (64bit)
Re: Werte aus Tabelle mittels Makros filtern und ausgeben
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:
umwandeln in
Gruß
Charly
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
Code: Alles auswählen
oFilterBeschreib.ContainsHeader = False
Charly
Re: Werte aus Tabelle mittels Makros filtern und ausgeben
Hallo
Danke! Super es klappt!
Vielen Dank an Karo und Charly
Gruß Hoover
Danke! Super es klappt!
Vielen Dank an Karo und Charly
Gruß Hoover
Re: Werte aus Tabelle mittels Makros filtern und ausgeben
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
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
Hallo Hoover!
Ich habe den Code ergänzt.
Gruß
Charly
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
Charly
Re: Werte aus Tabelle mittels Makros filtern und ausgeben
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
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
Hallo Damuscheng85 oder hoover oder wer auch immer
Mit
msgbox thisComponent.currentselection().numberformat
könntest du den Formatindex der aktuellen Zelle auslesen....
Gruß Karo
Mit
msgbox thisComponent.currentselection().numberformat
könntest du den Formatindex der aktuellen Zelle auslesen....
Gruß Karo
LO7.4.7.2 debian 12(bookworm) auf Raspberry4b 8GB (64bit)
LO24.8.2.1 flatpak debian 12(bookworm) auf Raspberry4b 8GB (64bit)
LO24.8.2.1 flatpak debian 12(bookworm) auf Raspberry4b 8GB (64bit)
Re: Werte aus Tabelle mittels Makros filtern und ausgeben
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:
Gruß
Charly
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
Charly
Re: Werte aus Tabelle mittels Makros filtern und ausgeben
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
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
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.
Gruß
Charly
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
Charly
Re: Werte aus Tabelle mittels Makros filtern und ausgeben
Vielen Dank!
Hat alles super geklappt.
Danke, schöne Weihnachten!
Liebe Grüße
Hat alles super geklappt.
Danke, schöne Weihnachten!
Liebe Grüße