Zellen zeilenweise vereinen

Libreoffice Version: 6.4.7.2
Build-ID: 1:6.4.7-0ubuntu0.20.04.8
Calc

Ich habe eine Tabelle mit Buchungen auf einem Bankkonto bekommen, die ich weiterverarbeiten muss.

Die Texte zu den Buchungen sind jeweils auf mehrere Zeilen verteilt (links im Bild). Nach jedem Eintrag steht eine leere Zeile.

Ich kann aber nur damit arbeiten, wenn sie in einer einzigen Zelle sind, und so jeder Eintrag nur eine Zeile braucht (rechts im Bild).

Mit “Zellen verbinden” könnte man das natürlich machen, aber ich habe leider nicht die Zeit das bei hunderten Einträgen zu machen :upside_down_face:

Ich habe gerade gar keinen Ansatzpunkt dafür.

Ich schon:

from itertools import groupby

def join_details(*_):
    doc = XSCRIPTCONTEXT.getDocument()
    source = doc.Sheets["Tabelle1"]  # change me
    cursor = source.createCursorByRange(source["A2"])
    cursor.gotoEndOfUsedArea(True)
    #data = list(zip(*cursor.DataArray)) 
    data = list(zip(*cursor.FormulaArray))
    for i in (0, 1, 3):
        data[i] = [entry for entry in data[i] if entry]
    data[2] = [ ' '.join(g)
                   for k, g
                   in groupby(data[2], key=bool) if k]
    data = tuple(zip(*data))
    target = doc.Sheets["Tabelle2"] # Change me
    t_cursor = target.createCursorByRange(target["A2"])
    t_cursor.collapseToSize(len(data[0]), len(data))
    #t_cursor.DataArray = data
    t_cursor.FormulaArray = data

Erstellt unter den Annahmen:

  1. die Quelldaten befinden sich im Tabellenblatt »Tabelle1«
  2. die »komprimierten« Daten werden in ein Tabellenblatt »Tabelle2« geschrieben
  3. es gibt eine Kopfzeile die nicht verarbeitet wird.

Das ist python, zum organisieren und bearbeiten wirst du apso.oxt benötigen
Du kannst die Tabellennamen natürlich anpassen an deine Tabellennamen
ggf. musst du die Spalten A und B nochmal als Datum formatieren, und Spalte D als Währung.
im Anhang ein BeispielsDokument mit python-code
Bankauszüge_komprimieren.ods (17.1 KB)

1 Like

Mega :grinning:
Du hast mir wahnsinnig geholfen :blush: Vielen Dank!

Das Skript wirft einen Type-Fehler, wenn eine Zelle nur eine Zahl enthält, aber die betreffenden Zellen konnte ich mit einem regulären Ausdruck anpassen.

Freut mich das ich helfen konnte, insbesondere auch daß du die Fehlermeldung gelesen, verstanden und selbstständig ( in den Quelldaten ) gefixt hast!

ps. Fix: tausche im python-code in Zeile 8 und in der letzten Zeile:

DataArray FormulaArray

1 Like

Siehe auch Apache OpenOffice Community Forum - [Python,Calc] Group_Concat for the spreadsheet - (View topic)
Das gruppiert die erste selektierte Spalte und verkettet die letzte. Die Ergebnistabelle wird mit einer Leerzeile Abstand darunter gesetzt.

2 Likes