Seite 1 von 3

Re: Wörter aus Tabellenzelle aussortieren / herausfiltern.

Verfasst: Mi, 06.04.2011 11:15
von Karolus
Hallo
Versuch mal an einer Kopie der Datei:
1. → Daten → Filter → Standardfilter
  • "deine Spalte" = ^.*(schwarz|weiß|grün|hell grün).*$
    mit der (Zusatz)option: [x]regulärer Ausdruck
    und der Ausgabe nach "Woanders"
2. in "Woanders" alles entfernen was "nicht Farbe ist" per → Bearbeiten → Suchen und ersetzen:
  • Suche nach ^.*(schwarz|weiß|grün|hell grün).*$
    ersetzen durch $1
    und ebenfalls darauf achten daß die Option [x]regulärer Ausdruck gesetzt ist.
Funktioniert das wunschgemäß?

Gruß Karo

Re: Wörter aus Tabellenzelle aussortieren / herausfiltern.

Verfasst: Mi, 06.04.2011 11:49
von Karolus
Hallo
MIr wird einfach der Inhalt von A1 als Feldname angezeigt (Spaltentitel Description), egal was ich vorher markiert habe.
Schalte unten in den Optionen [ ]Bereich enhält Spaltenbeschriftungen ab.

jetzt :
Feldname → "Spalte A"
Bedingung → =
Wert → ^.*(schwarz|weiß|grün|hell grün).*$

und ich würde die Ausgabe nicht nebenan nach B1 leiten, sondern in ein anderes Tabellenblatt (ggf zunächst erstellen) zB. Tabelle2.A1

Gruß Karo

Re: Wörter aus Tabellenzelle aussortieren / herausfiltern.

Verfasst: Mi, 06.04.2011 12:24
von Karolus
Hallo
..... hatte aber auch Tabelle2.A1:A6000 geschrieben
für die Ausgabe musst du nur die Startadresse angeben: Tabelle2.A1

Gruß Karo

Re: Wörter aus Tabellenzelle aussortieren / herausfiltern.

Verfasst: Mi, 06.04.2011 12:38
von Karolus
Hallo
Was ist mit den n Umbrüchen?

Die Farben kommen definitiv erst hinter einem Absatz und einer Leerzeile (alles jeweils im Text innerhalb einer Tabellenzelle).
Kann ich jetzt so nicht beantworten, kannst du dich hier registrieren um eine Beispieldatei anhängen zu dürfen ?

Gruß Karo

Re: Wörter aus Tabellenzelle aussortieren / herausfiltern.

Verfasst: Mi, 06.04.2011 12:56
von Karolus
Hallo
Wenn ich eine Mustertabelle bereitstellen soll, muss ich erstmal anfangen herumzuändern, ich will ja keine Namen und persönlichen Daten veröffentlichen :-)
Selbstverständlich, aber wir benötigen ja nur representative Daten aus wenigen Zellen.

Karo

Re: Wörter aus Tabellenzelle aussortieren / herausfiltern.

Verfasst: Mi, 06.04.2011 12:56
von Stephanie
Hallo,

nach einigem Herumprobieren habe ich festgestellt, dass ich doch schon für dieses Forum angemeldet war und habe mein Passwort wiedergefunden.

Hier ist eine etwas entfremdete Tabelle, ich hoffe zwei Zellen reichen?

Stephanie

Re: Wörter aus Tabellenzelle aussortieren / herausfiltern.

Verfasst: Mi, 06.04.2011 13:07
von Karolus
Hallo
In deiner Beispielsdatei funktioniert genau der Reguläre Ausdruck aus meinen letzten Antworten zum Filtern und Suchen & Ersetzen !
Karo

Re: Wörter aus Tabellenzelle aussortieren / herausfiltern.

Verfasst: Mi, 06.04.2011 13:32
von Stephanie
Hallo,
Karolus hat geschrieben:In deiner Beispielsdatei funktioniert genau der Reguläre Ausdruck aus meinen letzten Antworten zum Filtern und Suchen & Ersetzen !
Ich habe es nochmal an der Langversion der Tabelle probiert und es gibt Fortschritte: ich habe Daten! :)

Wenn ich die Langversion der Tabelle nehme, ist aber immer noch irgendein Fehler drin.

Von ursprünglich 4743 Zeilen bleiben in Tabelle 2 nur 211 über.

Außerdem wird immer exakt ein Wort herausgefiltert, er schafft es nicht zwei Farbwörter herauszufiltern. Mit letzterem Fehler könnte ich notfalls leben, es sind nur in wenigen Zellen zwei Farbwörter.

Nachtrag:

Ich glaube doch, dass die Probleme irgendwie an Absätzen festzumachen sind.

Ich habe gerade eine Vorbehandlung probiert: zunächst Suchen und ersetzen, reguläre Ausdrücke \n
Danach die Filter Prozedur. Von 4743 Zeilen bleiben jetzt immerhin 4678 Zeilen übrig. Ein paar sind aber immer noch irgendwohin verschwunden. $ als regulärer Ausdruck wird in Suchen und Ersetzen nicht gefunden. Ich weiß nicht welcher Restfehler Zeilen schluckt?

Nachtrag 2:

Ups, ich glaube ich habe einen Fehler gefunden. In jeder zehnten Zelle scheint eine Farbangabe zu fehlen - und wenn es keine Farbangabe gibt dann verschwindet die Zelle. Ich hatte gedacht ich hätte in allen Zellen Farben, aber anscheinend habe ich die in Einzelfällen ausgelassen.

Gibt es eine Möglichkeit im Befehl zu sagen, dass wenn keine Farbe in der Zelle gefunden wird er einen Platzhalter bzw. eine leere Zelle lassen soll?

Die frisch heraussortierten Farben müssen nämlich am Ende zurück in die Gesamttabelle, das geht nicht wenn eine Spalte plötzlich kürzer ist.

Nachtrag 3:

Bei der ganzen Herumärgerei mit dem Filtern habe ich völlig den (¯`v´¯) wunderbaren (¯`v´¯) zweiten Teil der Anleitung übersehen
in "Woanders" alles entfernen was "nicht Farbe ist" per → Bearbeiten → Suchen und ersetzen:

Suche nach ^.*(schwarz|weiß|grün|hell grün).*$
ersetzen durch $1
und ebenfalls darauf achten daß die Option [x]regulärer Ausdruck gesetzt ist.
:idea: Einfach die Filterei weglassen, nur zweiten Teil der Anweisung machen, nachdem vorher Umbrüche \n entfernt wurden. Und schon bleiben nur die Farben stehen. Und in den wenigen Zellen, wo noch mehr drin steht gab es keine Farben und ich weiß, dass ich da was manuell nachbearbeiten muss.

Perfekt zu 95 %. Einziger Tropfen Trübsal: es wird immer nur eine Farbe gefunden, nie zwei. Gibt es noch eine Möglichkeit auch die Felder zu finden, in denen zwei Farben genannt werden? Das dürften ca. 7 % der Felder sein.

Stephanie

Re: Wörter aus Tabellenzelle aussortieren / herausfiltern.

Verfasst: Mi, 06.04.2011 14:32
von Karolus
Hallo
Das Problem sind vmtl. die Manuellen Umbrüche und die mehrfach vorkommenden Farben.

Kannst du dir die Umgebung so einrichten wie ich hier beschreibe?
Damit lässt sich sich die ganze Aufgabenstellung mit der folgenden Formel lösen:

Code: Alles auswählen

=MTRANS(FINDALL(MULTIKETTE(A1:A10000);"(schwarz|weiß|(?:hell )?grün)"))
als [x]Matrixformel im Formelassistenten
*dabei werden die mehrfach vorkommenden Farben einer Zelle in verschiedene Zellen ausgegeben.

Gruß Karo

Re: Wörter aus Tabellenzelle aussortieren / herausfiltern.

Verfasst: Do, 07.04.2011 15:02
von Stephanie
Hallo,

ich war gestern erst mal erschreckt von dieser neuen kompliziert aussehenden Funktion. Bisher habe ich noch nie Makros in OO benutzt. Jetzt wollte ich mich gerade mal daran machen und bin prompt stecken geblieben.
Karolus hat geschrieben:Kannst du dir die Umgebung so einrichten wie ich hier beschreibe?
Dazu müsste ich eine Anleitung ohne jede Lücken haben, da ich mit Makros völlig ungeübt bin :)
→ Extras → Makros → Makros verwalten → OpenOffice.org_basic → Meine Makros.. → Standard

Soweit so gut
→'Neu'

Ich nehme an Neu durch klick auf die Schaltfläche neu links und nicht durch umbenennen von irgendwas, wie ich zuerst vermutete?

Nachdem ich auf die Schaltfläche neu geklickt habe geht ein neues Fenster auf "Meine Makros & Dialoge.Standard - OpenOffice.org Basic"

Darin steht

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

Sub Main

End Sub

Sub neu

End Sub

Sub Macro1

End Sub



Ich war nicht sicher was ich jetzt damit machen sollte - alles ersetzen durch den Code 1?
viewtopic.php?f=2&t=43087&p=158588#p158588

Das habe ich jetzt mal gemacht und auf speichern geklickt.

2. Texteditor - benutzte ich sonst nie, habe aber unter Windows Zubehör einen Editor gefunden.

"dein OOobenutzerverzeichnis"

Was ist mein Benutzerverzeichnis und wo finde ich wie das heißt? In der OO Hilfe auf meinem PC habe ich gefunden
Benutzerdaten So greifen Sie auf diesen Befehl zu... Menü Extras - Optionen - OpenOffice.org - Register Benutzerdaten

Und darin Pfade? Ist das das richtige? Darin habe ich einen Pfad zu meinen eigenen Dateien, sowie zu Anwendungsdaten Backup, Gallery, etc.

Welchen Pfad brauche ich denn?

Ich habe gerade auch noch mal online gesucht und hier gefunden http://www.ooowiki.de/BenutzerVerzeichnis Wo liegt das Benutzerverzeichnis? Unter Windows® XP liegt es unterhalb von C:\Dokumente und Einstellungen\[Benutzername]\Anwendungsdaten\

OK, ich habe meinen Arbeitsplatz aufgerufen und gefunden
C:\Dokumente und Einstellungen\Stephanie\Anwendungsdaten\OpenOffice.org\3\user
und dann noch einen Haufen Ordner.

Wenn ich das kombiniere mit deiner Anleitung Schritt 2 habe ich dann C:\Dokumente und Einstellungen\Stephanie\Anwendungsdaten\OpenOffice.org\3/user/Scripts/python/sheetFunction.py

Nur gehen jetzt die Schrägstriche in unterschiedliche Richtungen. Welche Schrägstrich Richtung ist denn richtig?

So, an der Stelle stecke ich gerade fest, könntest du noch einmal erklären was weiter zu tun ist?

Nach Formelassistent habe ich übrigens auch eine Weile gesucht und bin schließlich zu dem Schluss gekommen, dass das die Schaltfläche neben der Eingabezeile fx Funktionsassistent sein muss.

Der schreibt immer automatisch ein = darein, so dass ich dann wohl MULTIKETTE(INDIREKT("A2:"&ADRESSE(2;A1;4));"") ohne gleich darein kopieren muss, sonst habe ich am Ende zwei gleich ==

Nun fehlt ja noch der eine Schritt, den Code in den Texteditor speichern.

Ich habe nun Fehlermeldungen, liegt das an dem ungespeicherten Code? Er erzählt mir was von "gesperrte Zellen können nicht geändert werden". Und dann geht das Makro Fenster Basic auf. Und ein Fehlermeldungsfenster "BASIC Laufzeitfehler. Es ist eine Exception aufgetreten. Type com.sun.star.script.provider.ScriptFrameworkErrorException Message: loading component library failed "

OK, das hört sich ja wirklich an, als ob ihm etwas fehlt, das ist also der ungespeicherte Code Fehler?

Stephanie

Re: Wörter aus Tabellenzelle aussortieren / herausfiltern.

Verfasst: Do, 07.04.2011 17:41
von Karolus
Hallo
Stephanie hat geschrieben: Darin steht

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

Sub Main

End Sub

Sub neu

End Sub

Sub Macro1

End Sub



Ich war nicht sicher was ich jetzt damit machen sollte - alles ersetzen durch den Code 1?
viewtopic.php?f=2&t=43087&p=158588#p158588
Ja, anscheinend hat der Basicteil geklappt - weiter mit Python:
Stephanie hat geschrieben:OK, ich habe meinen Arbeitsplatz aufgerufen und gefunden
C:\Dokumente und Einstellungen\Stephanie\Anwendungsdaten\OpenOffice.org\3\user
und dann noch einen Haufen Ordner.
In diesem Haufen findest den Ordner 'Scripts' in dem du folgendes zip-archiv entpackst:
( Falls du schon einen Unterordner 'python' angelegt hast, entferne ihn vor dem entpacken.)
python.zip
(1.73 KiB) 69-mal heruntergeladen
edit 9.4.11: die Datei sheetFunctions.py im zip-archiv umbenannt in sheetFunction.py
Falls das klappt, ist dort jetzt ein Unterordner 'python' der wiederrum eine Datei namens 'sheetFunctions.py' enthält.

Jetzt benötigst du nur nach die Formel:

Code: Alles auswählen

=MTRANS(FINDALL(MULTIKETTE(A1:A10000);"(schwarz|weiß|(?:hell )?grün)"))
wie du bereits herausgefunden hast als [x]Matrixformel

Gruß Karo

Re: Wörter aus Tabellenzelle aussortieren / herausfiltern.

Verfasst: Do, 07.04.2011 18:55
von Stephanie
Hallo,
Karolus hat geschrieben:
Stephanie hat geschrieben:OK, ich habe meinen Arbeitsplatz aufgerufen und gefunden
C:\Dokumente und Einstellungen\Stephanie\Anwendungsdaten\OpenOffice.org\3\user
und dann noch einen Haufen Ordner.
In diesem Haufen findest den Ordner 'Scripts' in dem du folgendes zip-archiv entpackst:
( Falls du schon einen Unterordner 'python' angelegt hast, entferne ihn vor dem entpacken.)
python.zip
Gut, ich habe jetzt die Datei heruntergeladen und gespeichert unter
C:\Dokumente und Einstellungen\Stephanie\Anwendungsdaten\OpenOffice.org\3\user\Scripts

und entpackt als

C:\Dokumente und Einstellungen\Stephanie\Anwendungsdaten\OpenOffice.org\3\user\Scripts\python

Den Zip Ordner habe ich anschließend gelöscht.
Karolus hat geschrieben: Falls das klappt, ist dort jetzt ein Unterordner 'python' der wiederrum eine Datei namens 'sheetFunctions.py' enthält.
Ja.
Karolus hat geschrieben: Jetzt benötigst du nur nach die Formel:

Code: Alles auswählen

=MTRANS(FINDALL(MULTIKETTE(A1:A10000);"(schwarz|weiß|(?:hell )?grün)"))
wie du bereits herausgefunden hast als [x]Matrixformel
Haken bei Matrix, Formel eingegeben beim Funktionsasstistenten mit Strg c Strg v

Sobald ich das Strg v loslasse kommt wieder die bekannte Fehlermeldung
Makro Fenster Basic geht auf. Fehlermeldungsfenster
"BASIC Laufzeitfehler. Es ist eine Exception aufgetreten. Type com.sun.star.script.provider.ScriptFrameworkErrorException Message: loading component library failed file C Programme Open Office org program basis program phytonloader uno dll "

Mit diversen Satzzeichen dazwischen.

Mir ist jetzt aufgefallen, dass der mir bestimmte Zeilen von dem Code in Basic markiert und zwar

oScript = oMSP.getScript(sURL)


Stimmt irgendwas an der Zeile nicht?

Oder kannst du sonst feststellen, was falsch gelaufen ist?

Oder gibt es irgendeinen Fehler in der phyton Datei? Wenn ich mir die vom Editor anzeigen lasse sehe ich s. u.

Stephanie

Code: Alles auswählen


# -*- coding: utf-8 -*-

from __future__ import division
import sys
import uno
import re
from itertools.chain import from_iterable as flat
from bisect import bisect_left as left
from math import *


zahlen = [ float , int ]

wrapper = uno.createUnoStruct('com.sun.star.script.ArrayWrapper')
wrapper.IsZeroIndex = False

def interpol( x_range, x , y_range ):
    """ Calcfunktion zur Rückgabe eines interpolierten y-werts aus den jeweiligen Nachbarwerten
        im y-Bereich, ermittelt aus den Verhältnissen eines x-wertes zu seinen Nachbarwerten
          siehe  http://www.ooo-portal.de/index.php?module=pnForum&func=viewtopic&topic=6055"""
    x_range = list( flat( x_range ) )
    y_range = list( flat( y_range ) )
   
    if x < min( x_range ) or x > max( x_range ):
        return "##oofRangeErr"
   
    if x in x_range:
        return y_range[ x_range.index(x) ]
   
    else:
        ri = left( x_range, x )
        li = ri-1
        ratio = ( x - x_range[li] ) / ( x_range[ri] - x_range[li] )
        return y_range[li] + ratio * ( y_range[ri] - y_range[li] )
   

def sjoin( datarange , joinstring = "" ):
   
    """ Calcfunktion zum verketten ganzer Zellbereiche,
        mit Bereichsadressangabe und mit der optionalen
        Möglichkeit eines Verbindungszeichens oder -Texts"""
   
    if isinstance (datarange, tuple): # cellranges always *nested* tuples       
        return joinstring.join("%s" % elem for elem in flat(datarange) if elem)
    else :
        return datarange    # a single cellvalue

   

def quadriere(data):
   
    """ Demo-funktion zum Quadrieren einzelner Zellen
        oder eines Zellbereiches als Arrayfunktion
        To be called through a StarBasic wrapper.
        ->Input_arg: cellrange or single cell
        --> Out: Range with same Dimension as Input."""
   
    if isinstance(data,tuple):    ## data is nestet tuple
        rows = []   ## build a resultrange with inputdimension
        for row in data:               
            rows.append(tuple( [ val**2  if type(val) in zahlen
                               else None for val in row]))
           
        ## we need the wrapper to make the 'right' datastructure
                                       ##    for poor old Basic
        wrapper.Array = tuple(rows)
        return wrapper
   
    if type(data) in zahlen:  ## here we catch the single numeric Inputs
        return data **2
    else:
        return None


def findall( stext , regex , imax=0):
    stext = "%s" %(stext)
    liste = re.findall( regex, stext )
    liste.extend([None]* max(0,(imax - len(liste))))                       
    wrapper.Array = tuple(liste)
    return wrapper

def auswerten( args ):
   
    """ simple demo-function
        to evaluate raw-string-expressions like 'x**2+4*y-z' in valid Pythonsyntax,
        'args' must be an cellrange of 4 with the contents :
                                                Expression, x_value, y_value, z_value.
        Values inside the expression must have a Decimal-Point not Decimal-komma ."""
   
    try:
        func, x, y, z = ( flat (args) ) # flat ? -> take a look into the 'import-lines'
        try:
            return eval( func )
        except:
            return '#args_Error'
    except :
        return '#Dim_Error'


Re: Wörter aus Tabellenzelle aussortieren / herausfiltern.

Verfasst: Do, 07.04.2011 19:33
von Karolus
Hallo
Message: loading component library failed file C Programme Open Office org program basis program phytonloader uno dll
Das liest sich so als ob bei deinem OOo eine Datei fehlt ? glaub ich aber nicht.

Schließe mal OOo komplett einschließlich Schnellstarter, und starte dann neu, vielleicht hilfts ja ...

Ps. Kannst du den einkopierten Pythoncode in Code-tags setzen?
Gruß Karo

Re: Wörter aus Tabellenzelle aussortieren / herausfiltern.

Verfasst: Do, 07.04.2011 19:51
von Stephanie
Hallo,

mir fällt gerade ein: braucht man vielleicht für irgendeine dieser Operationen Administrator Rechte auf dem PC? Ich habe zwei Benutzerkonten auf dem PC und benutzte das Administrator Konto eigentlich nicht für normale alltägliche Arbeiten.

Stephanie

Re: Wörter aus Tabellenzelle aussortieren / herausfiltern.

Verfasst: Do, 07.04.2011 20:35
von Karolus
Hallo
Nein, brauchst du nicht, unterhalb von C:\Dokumente und Einstellungen\Stephanie\ solltest tun können was du magst.

Gruß Karo