Zellinhalte vergleichen und Leerzeilen einfügen

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: Zellinhalte vergleichen und Leerzeilen einfügen

Re: Zellinhalte vergleichen und Leerzeilen einfügen

von Karolus » Di, 05.11.2013 14:40

Hallo
@Karolus: Vielen Dank, das sieht noch effektiver aus! Jetzt bin ich gerade dabei mich mit Python-Einbindung in OO zu belesen
Bei den ersten Schritten kann ich dir etwas helfen, im angehängten Dokument ist ein Script mit folgendem Inhalt eingebettet:

Code: Alles auswählen

import uno
from os import path


context = XSCRIPTCONTEXT

ctx = uno.getComponentContext()
servicemanager = ctx.ServiceManager
createUnoService = servicemanager.createInstance
file_access = createUnoService("com.sun.star.ucb.SimpleFileAccess")
pathsubstution = createUnoService("com.sun.star.util.PathSubstitution")

def install_me(*_):
    """
    Funktion zum kopieren dieses eingebetteten Pythonscripts
    ins den .userconfig_python_pfad"""

    pythonfolder = pathsubstution.substituteVariables('$(user)/Scripts/python/',0)
    filename = path.basename(__file__)
    if not file_access.isFolder( pythonfolder):
        file_access.createFolder(pythonfolder)
    file_access.copy(__file__, path.join( pythonfolder, filename))


def groupbyfirstcolumn():
    doc = context.getDocument()
    cur_sel = doc.getCurrentSelection()
    sheet = cur_sel.Spreadsheet
    cursor = sheet.createCursor()
    cursor.gotoStartOfUsedArea( False )
    cursor.gotoEndOfUsedArea( True )
    data = cursor.getDataArray()

    header = data[0][0]
    outdata = [(header,'','',''),]

    for row in data:
        if not row[0]== header:
            header = row[0]
            outdata.append((header,'','',''))
        outdata.append(row[1:])

    firstcol, firstrow = len(data[0])+1, 0
    colsize, rowsize = map( len, [outdata[0], outdata])
    lastcol, lastrow = firstcol + colsize -1, firstrow + rowsize -1
    target = sheet.getCellRangeByPosition(firstcol, firstrow, lastcol, lastrow )
    target.setDataArray( tuple(outdata))

 
Das kannst du per →Makro→Makro ausführen →→Thema62708_ScriptContainer→groupby→install_me >'ausführen'
Und das Ding erstellt automatisch (-falls noch nicht vorhanden- ) ein 'Python'-verzeichniss an der richtigen Stelle in deiner Benutzerkonfiguration und kopiert die Scriptdatei dort hinein.

Karolus
Dateianhänge
Thema_62708_scriptcontainer.ods
(7.75 KiB) 36-mal heruntergeladen

Re: Zellinhalte vergleichen und Leerzeilen einfügen

von DDzzz » Di, 05.11.2013 12:47

@Clag, ich habe das split-Archiv runtergeladen, kann weg ;-)
@Karolus: Vielen Dank, das sieht noch effektiver aus! Jetzt bin ich gerade dabei mich mit Python-Einbindung in OO zu belesen :-)

Re: Zellinhalte vergleichen und Leerzeilen einfügen

von clag » Di, 05.11.2013 09:53

Hallo Karolus,

es sind ja drei recht verschiedene Wege der Herangehensweise,
also ich fühle mich da überhaupt nicht überfahren.
Ich hatte ja extra den :lol: gesetzt damit es nicht so ernst erscheint.

Ich persönlich begrüße immer sachlich vorgetragene Korrekturen oder Optimierungen oder gänzlich neue Ideen,
da es ja auch immer irgendwie eine Erweiterung des eigenen OO/EDV/Computer Horizonts bedeutet.

Re: Zellinhalte vergleichen und Leerzeilen einfügen

von Karolus » Di, 05.11.2013 09:33

Hallo

Ich hab das nicht gepostet um ""euch eine Schlappe zu erteilen""

Ich würde aber Rückmeldungen/Rückfragen begrüßen, damit ich weiss ob hier überhaupt Bedarf besteht.

Karolus

Re: Zellinhalte vergleichen und Leerzeilen einfügen

von clag » Di, 05.11.2013 08:55

Hallo Karolus,

das ist jetzt aber ne echte Schlappe für paljass's und clag's Bemühungen,
bei der Ausführungszeit können wir einpacken :lol:

Re: Zellinhalte vergleichen und Leerzeilen einfügen

von Karolus » Di, 05.11.2013 08:48

Hallo

ich hab das mal mit ein paar Zeilen Python gelöst - die gut 9000 Zeilen aus der kompletten Datei sind in < 0.3 sec durch.

Code: Alles auswählen

context = XSCRIPTCONTEXT

def groupbyfirstcolumn():
    doc = context.getDocument()
    cur_sel = doc.getCurrentSelection()
    sheet = cur_sel.Spreadsheet
    cursor = sheet.createCursor()
    cursor.gotoStartOfUsedArea( False )
    cursor.gotoEndOfUsedArea( True )
    data = cursor.getDataArray()

    header = data[0][0]
    outdata = [(header,'','',''),]

    for row in data:
        if not row[0]== header:
            header = row[0]
            outdata.append((header,'','',''))
        outdata.append(row[1:])

    firstcol, firstrow = len(data[0])+1, 0
    colsize, rowsize = map( len, [outdata[0], outdata])
    lastcol, lastrow = firstcol + colsize -1, firstrow + rowsize -1
    target = sheet.getCellRangeByPosition(firstcol, firstrow, lastcol, lastrow )
    target.setDataArray( tuple(outdata))
 
Die Ausgabe erfolgt rechts neben den Ausgangsdatensätzen.
Die neue Spalte mit den Preisen muss dann nachträglich als 'Währung' formatiert werden.

Karolus

Re: Zellinhalte vergleichen und Leerzeilen einfügen

von clag » Di, 05.11.2013 05:45

Hallo

habe mal deine Komplette Liste bearbeitet mit BF und auf eigenem Blatt
da kannst du die Darstellung ganz fix anpassen, durch ändern der zwei Vorlagen Band und Album (F11) :)

Edit:
komplette Liste entfernt, jetzt eine gekürzte Version um das Prinzip zu verdeutlichen
CD(2)_fertig_gekürzt.ods
(32.77 KiB) 43-mal heruntergeladen

Re: Zellinhalte vergleichen und Leerzeilen einfügen

von clag » Di, 05.11.2013 05:10

Moin DDzzz,
DDzzz hat geschrieben:ich bin nur gerade hochgradig übermüdet, überarbeitet und überfordert weil ich schon die ganze Nacht an der Lösung sitze

na jetzt ausgeschlafen :)

Wo klemmt es denn nun bzw was ist nicht durchschaubar für dich?

Re: Zellinhalte vergleichen und Leerzeilen einfügen

von DDzzz » Di, 05.11.2013 05:00

Ich bin jetzt mit paljass' version gefahren weil es dringend war aber nächstes Jahr zur gleichen Zeit steht wieder die gleiche Arbeit an dann probiere ich mal welche Version einfacher für mich ist. Den paljass-schen Ansatz durchschaue ich allerdings immernoch nicht ;-) Vielen Dank euch Beiden, ihr habt mir wirklich enorm geholfen!

Re: Zellinhalte vergleichen und Leerzeilen einfügen

von clag » Mo, 04.11.2013 15:47

ok dann etwas genauer

du extrahierst dir eine Liste aller Bands in eine Spalte
die Bandnamen markierst und kopierst du
dann springst du an das Ende deiner Bandspalte in der großem Tabelle mit ctrl cursortaste runter
dort fügst du die kopierten Namen einmal ein und füllst dann die Spalte Album mit dem " ' " Platzhalter
ist das erledigt fügst du noch einmal die kopierten Namen in er Spalte Band ein
spring mit ctrl Pos1 an den Anfang der Tabelle füge eine Spalte ein
in die zweite Zeile der neuen Spalte die Formel eingeben und runter ziehen so weit wie nötig ist nicht gut weil Format mit übertragen wird
besser ist es die Formel zu kopieren und über "Inhalte einfügen" nur die Formel in den Bereich einfügen
fertig

(das schreiben wie es geht hat vermutlich doppelt so lange gedauert wie die Aktion selbst) :lol:

Re: Zellinhalte vergleichen und Leerzeilen einfügen

von paljass » Mo, 04.11.2013 15:39

Hi,
Das verstehe ich jetzt nicht so ganz,
mach dir nichts draus, ich verstehs auch nicht :wink:
Aber so wie ich clag kenne, kommt da noch ne nähere Beschreibung.

Gruß
paljass

Re: Zellinhalte vergleichen und Leerzeilen einfügen

von DDzzz » Mo, 04.11.2013 15:29

clag hat geschrieben: Sortieren
Filtern (Bandnamen extrahieren)
Bandnamen Zeilen einfügen und Formatieren
neue Spalte mit Formel füllen
nochmal sortieren
Das verstehe ich jetzt nicht so ganz, wie man die Bandnamen sortiert und Duplikate entfernt weiss ich aber das Zeilen einfügen? Geht das automatisiert?

Re: Zellinhalte vergleichen und Leerzeilen einfügen

von clag » Mo, 04.11.2013 14:40

Hi DDzzz
fertig sieht es so aus
cd-versuch+Formelangewendet.ods
(25.21 KiB) 55-mal heruntergeladen
hmm ungefähr 5min Arbeit

Sortieren
Filtern (Bandnamen extrahieren)
Bandnamen Zeilen einfügen und Formatieren
neue Spalte mit Formel füllen
nochmal sortieren

fertig :D

Re: Zellinhalte vergleichen und Leerzeilen einfügen

von DDzzz » Mo, 04.11.2013 14:16

:shock: ok Danke! Ja jetzt wo du es so sagst stimmts ich bin nur gerade hochgradig übermüdet, überarbeitet und überfordert weil ich schon die ganze Nacht an der Lösung sitze... ich werde gleich mal sehen ob ich es jetzt schaffe ;)

Re: Zellinhalte vergleichen und Leerzeilen einfügen

von paljass » Mo, 04.11.2013 14:07

Nun ja,
mit ein wenig mehr Eigeninitiative hätte man darauf kommen können, dass
ZÄHLENWENN($A$3:$A$19
ur bis Zeile 19 zählt und dass
SVERWEIS(ZEILE(A2);$A$3:$F$19
eben auch nur den Bereich bis Zeile 19 durchsucht.

Wenn du die beiden 19 durch 10000 ersetzt, sollte das auch mit den restlichen Alben klappen.

Gruß
paljass

Nach oben