Seite 1 von 1
Re: Werte aus Tabelle mittels Makros filtern und ausgeben
Verfasst: Di, 22.12.2009 13:24
von Charly
Hallo!
Ich habe ein Makro mit deinen Angaben geschrieben. Vielleicht passt es so!
Gruß
Charly
Re: Werte aus Tabelle mittels Makros filtern und ausgeben
Verfasst: Di, 22.12.2009 14:00
von Charly
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
Verfasst: Di, 22.12.2009 14:05
von hoover
Also das hier ist die Datei
Ich bin jetzt auch registriert(Deshalb statt h00ver --> hoover)
Re: Werte aus Tabelle mittels Makros filtern und ausgeben
Verfasst: Di, 22.12.2009 14:11
von Karolus
Hallo
Ändere im Makrocode die Zeile:
oFilterBeschreib.ContainsHeader = True
auf:
oFilterBeschreib.ContainsHeader = false
Gruß Karo
Re: Werte aus Tabelle mittels Makros filtern und ausgeben
Verfasst: Di, 22.12.2009 14:13
von Charly
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
Re: Werte aus Tabelle mittels Makros filtern und ausgeben
Verfasst: Di, 22.12.2009 14:14
von hoover
Hallo
Danke! Super es klappt!
Vielen Dank an Karo und Charly
Gruß Hoover
Re: Werte aus Tabelle mittels Makros filtern und ausgeben
Verfasst: Mi, 23.12.2009 07:14
von hoover
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
Verfasst: Mi, 23.12.2009 07:57
von Charly
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
Verfasst: Mi, 23.12.2009 08:12
von hoover
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
Verfasst: Mi, 23.12.2009 08:40
von Karolus
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
Verfasst: Mi, 23.12.2009 09:51
von Charly
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
Verfasst: Mi, 23.12.2009 13:16
von hoover
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
Verfasst: Mi, 23.12.2009 14:04
von Charly
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
Verfasst: Mi, 23.12.2009 15:17
von hoover
Vielen Dank!
Hat alles super geklappt.
Danke, schöne Weihnachten!
Liebe Grüße