Seite 2 von 2

Re: Zellinhalte vergleichen und Leerzeilen einfügen

Verfasst: Mo, 04.11.2013 15:47
von clag
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

Verfasst: Di, 05.11.2013 05:00
von DDzzz
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

Verfasst: Di, 05.11.2013 05:10
von clag
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

Verfasst: Di, 05.11.2013 05:45
von clag
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

Verfasst: Di, 05.11.2013 08:48
von Karolus
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

Verfasst: Di, 05.11.2013 08:55
von clag
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

Verfasst: Di, 05.11.2013 09:33
von Karolus
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

Verfasst: Di, 05.11.2013 09:53
von clag
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

Verfasst: Di, 05.11.2013 12:47
von DDzzz
@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

Verfasst: Di, 05.11.2013 14:40
von Karolus
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