Seite 1 von 1

[gelöst] Pro User und Funktion eine Zeile - möglichst schnell/einfach?

Verfasst: Mo 9. Mai 2022, 15:33
von hylli
In der anhängenden Datei findet man auf der Tabelle "Export" die Ausgangslage, d.h. insgesamt 4 Spalten:
- UserID
- Nachname
- Vorname
- Funktionen

In der Spalte Funktionen sind 1 bis X dem User zugeordneten Funktionen durch Komma+2 Leerzeichen getrennt dargestellt.

Damit ich die Tabelle für meine Zwecke weiter verarbeiten kann, sollte pro User und Funktion jeweils eine Zeile vorhanden sein, wie in der Tabelle "Wunschergebnis" zu sehen.

"Inspiriert" durch diesen Wiki-Eintrag...
http://www.ooowiki.de/SuchenUndErsetzen ... .2BAPw-gen
...gehe ich aktuell diesen umständlichen Weg:
  1. Tabelle kopieren und im Format RTF (Richt Text Format) in Writer einfügen
  2. In Writer mit der Funktion Suchen&Ersetzen den Feldtrenner ", " (Komma + zwei Leerzeichen) ersetzen durch "\n" (=Zeilenumbruch). Nun stehen die Funktionen innerhalb einer Zelle sauber untereinander.
  3. Die in Writer so angepasste Tabelle wieder kopieren und wiederum im Format RTF (Richt Text Format) in Calc einfügen.
  4. Nun muss ich pro Funktion und Benutzer eine Zeile in der Tabelle vorsehen bzw. entsprechende Anzahl Zeilen pro Benutzer erstellen.
  5. Die Zelle mit den nun untereinander stehenden Funktionen kopiere ich nun in die Zwischenablage, füge sie in einem Texteditor ein.
  6. Anschließend kopiere ich die Funktionen im Editor wieder in die Zwischenablage und füge diese als unformatierten Text wieder in die Tabellenkalkulation ein, so dass pro Funktion eine Zeile/Zelle verwendet wird.
  7. Zu guter letzt kopiere ich den jeweiligen Benutzer in der Tabellenkalkulation und füge diesen so oft ein, wie zugeordnete Funktionen vorhanden sind.
Die Frage ist:
Geht das irgendwie einfacher, schneller oder gar mit Funktionen?

Hylli
Pro_User_und_Funktion_eine_Zeile.ods
(11.31 KiB) 73-mal heruntergeladen

Re: Pro User und Funktion eine Zeile - möglichst schnell/einfach?

Verfasst: Mo 9. Mai 2022, 18:06
von karolus
Hallo

Code: Alles auswählen

def normalize_data(*_):
    doc = XSCRIPTCONTEXT.getDocument()
    sel = doc.CurrentSelection
    data = sel.DataArray
    out = []
    for uid, nachname, vorname, functions in data:
        for function in functions.split(",  "):
            out.append([uid, nachname, vorname, function])
    undo = doc.getUndoManager()
    undo.enterUndoContext("expand_functions")
    cursor = sel.Spreadsheet.createCursorByRange(sel)
    cursor.collapseToSize(len(out[0]), len(out)) 
    cursor.DataArray = out
    undo.leaveUndoContext()
Pro_Funktion_eine_Zeile_python.ods
(10.59 KiB) 65-mal heruntergeladen
Selektiere den Bereich ( hier A2:D4 ) und: →Makro→Macros ausführen→Pro_Funktion_eine_Zeile_python.ods →→opti→normalize_data

Re: Pro User und Funktion eine Zeile - möglichst schnell/einfach?

Verfasst: Di 10. Mai 2022, 10:02
von hylli
Wow!!! Was so wenige Zeilen Code bewirken können.

Funktioniert tadellos!

Damit wird der Umgang mit "diesen" Exporten wieder erträglicher, vielen Dank @karolus.

Hylli

Re: [gelöst] Pro User und Funktion eine Zeile - möglichst schnell/einfach?

Verfasst: Di 10. Mai 2022, 13:08
von hylli
Ich setze hier mal auf gelöst, natürlich dürfen aber gerne weitere Vorschläge gemacht werden.

Hylli