Wörter aus Tabellenzelle aussortieren / herausfiltern.

Das Tabellenkalkulationsprogramm

Moderator: Moderatoren

Karolus
********
Beiträge: 7532
Registriert: Mo, 02.01.2006 19:48

Re: Wörter aus Tabellenzelle aussortieren / herausfiltern.

Beitrag 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
LO7.4.7.2 debian 12(bookworm) auf Raspberry5 8GB (ARM64)
LO25.2.3.2 flatpak debian 12(bookworm) auf Raspberry5 8GB (ARM64)
Karolus
********
Beiträge: 7532
Registriert: Mo, 02.01.2006 19:48

Re: Wörter aus Tabellenzelle aussortieren / herausfiltern.

Beitrag 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
LO7.4.7.2 debian 12(bookworm) auf Raspberry5 8GB (ARM64)
LO25.2.3.2 flatpak debian 12(bookworm) auf Raspberry5 8GB (ARM64)
Karolus
********
Beiträge: 7532
Registriert: Mo, 02.01.2006 19:48

Re: Wörter aus Tabellenzelle aussortieren / herausfiltern.

Beitrag von Karolus »

Hallo
..... hatte aber auch Tabelle2.A1:A6000 geschrieben
für die Ausgabe musst du nur die Startadresse angeben: Tabelle2.A1

Gruß Karo
LO7.4.7.2 debian 12(bookworm) auf Raspberry5 8GB (ARM64)
LO25.2.3.2 flatpak debian 12(bookworm) auf Raspberry5 8GB (ARM64)
Karolus
********
Beiträge: 7532
Registriert: Mo, 02.01.2006 19:48

Re: Wörter aus Tabellenzelle aussortieren / herausfiltern.

Beitrag 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
LO7.4.7.2 debian 12(bookworm) auf Raspberry5 8GB (ARM64)
LO25.2.3.2 flatpak debian 12(bookworm) auf Raspberry5 8GB (ARM64)
Karolus
********
Beiträge: 7532
Registriert: Mo, 02.01.2006 19:48

Re: Wörter aus Tabellenzelle aussortieren / herausfiltern.

Beitrag 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
LO7.4.7.2 debian 12(bookworm) auf Raspberry5 8GB (ARM64)
LO25.2.3.2 flatpak debian 12(bookworm) auf Raspberry5 8GB (ARM64)
Stephanie
***
Beiträge: 67
Registriert: So, 13.01.2008 21:30

Re: Wörter aus Tabellenzelle aussortieren / herausfiltern.

Beitrag 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
Dateianhänge
Versuchstablle-zum-veröffentlichen.ods
(8.38 KiB) 82-mal heruntergeladen
Karolus
********
Beiträge: 7532
Registriert: Mo, 02.01.2006 19:48

Re: Wörter aus Tabellenzelle aussortieren / herausfiltern.

Beitrag von Karolus »

Hallo
In deiner Beispielsdatei funktioniert genau der Reguläre Ausdruck aus meinen letzten Antworten zum Filtern und Suchen & Ersetzen !
Karo
LO7.4.7.2 debian 12(bookworm) auf Raspberry5 8GB (ARM64)
LO25.2.3.2 flatpak debian 12(bookworm) auf Raspberry5 8GB (ARM64)
Stephanie
***
Beiträge: 67
Registriert: So, 13.01.2008 21:30

Re: Wörter aus Tabellenzelle aussortieren / herausfiltern.

Beitrag 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
Zuletzt geändert von Stephanie am Mi, 06.04.2011 14:46, insgesamt 1-mal geändert.
Karolus
********
Beiträge: 7532
Registriert: Mo, 02.01.2006 19:48

Re: Wörter aus Tabellenzelle aussortieren / herausfiltern.

Beitrag 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
LO7.4.7.2 debian 12(bookworm) auf Raspberry5 8GB (ARM64)
LO25.2.3.2 flatpak debian 12(bookworm) auf Raspberry5 8GB (ARM64)
Stephanie
***
Beiträge: 67
Registriert: So, 13.01.2008 21:30

Re: Wörter aus Tabellenzelle aussortieren / herausfiltern.

Beitrag 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
Karolus
********
Beiträge: 7532
Registriert: Mo, 02.01.2006 19:48

Re: Wörter aus Tabellenzelle aussortieren / herausfiltern.

Beitrag 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
Zuletzt geändert von Karolus am Sa, 09.04.2011 18:21, insgesamt 1-mal geändert.
LO7.4.7.2 debian 12(bookworm) auf Raspberry5 8GB (ARM64)
LO25.2.3.2 flatpak debian 12(bookworm) auf Raspberry5 8GB (ARM64)
Stephanie
***
Beiträge: 67
Registriert: So, 13.01.2008 21:30

Re: Wörter aus Tabellenzelle aussortieren / herausfiltern.

Beitrag 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'

Zuletzt geändert von Stephanie am Do, 07.04.2011 19:49, insgesamt 1-mal geändert.
Karolus
********
Beiträge: 7532
Registriert: Mo, 02.01.2006 19:48

Re: Wörter aus Tabellenzelle aussortieren / herausfiltern.

Beitrag 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
LO7.4.7.2 debian 12(bookworm) auf Raspberry5 8GB (ARM64)
LO25.2.3.2 flatpak debian 12(bookworm) auf Raspberry5 8GB (ARM64)
Stephanie
***
Beiträge: 67
Registriert: So, 13.01.2008 21:30

Re: Wörter aus Tabellenzelle aussortieren / herausfiltern.

Beitrag 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
Karolus
********
Beiträge: 7532
Registriert: Mo, 02.01.2006 19:48

Re: Wörter aus Tabellenzelle aussortieren / herausfiltern.

Beitrag von Karolus »

Hallo
Nein, brauchst du nicht, unterhalb von C:\Dokumente und Einstellungen\Stephanie\ solltest tun können was du magst.

Gruß Karo
LO7.4.7.2 debian 12(bookworm) auf Raspberry5 8GB (ARM64)
LO25.2.3.2 flatpak debian 12(bookworm) auf Raspberry5 8GB (ARM64)
Antworten