Seite 1 von 1

Leerzellen löschen! Nicht Zeilen! Spezielleres Problem!

Verfasst: Mo, 11.01.2021 14:24
von 1a-zuhause
Servus Community,

vielleicht seit ihr ja bisschen schlauer als ich :D ... Ich knobel seit Wochen an einem Problem, finde den Fehler aber nicht und kann es auch nicht lösen ...

Worum geht es?
Ich baue gerade an einem Konzept zur Verbesserung der Datenverarbeitung im E-Business Bereich.

Grundproblem:
Legende: # = Zelle hat Wert / +=Leerzelle
Ist-Zustand:
Zeilen der Form
A1 B2 C1 D1 E1 F1 G1 H1 I1 ...
# # # + # + + + #
# + + + # + # # +
.
.
.
Sollzustand:
A1 B2 C1 D1 E1 F1 G1 H1 I1 ...
# # # # # + + + +
# # # # + + + + +
.
.
.

Die Zellwerte sind immer unterschiedlich!
Soooo, wenn das erledigt ist müssen noch die Zeilen in Spalten umgewandelt werden. Sodass alle Werte einer Zeile untereinander in einer Spalte stehen, ohne Leerzellen dazwischen.

Die Werte der Zeilen sind auf c.a. 30 Zellen verteilt und immer unterschiedlich.

Viel Spaß beim Knobeln! Ich hoffe ihr schafft das!

Im aktuellen Fall geht es um Bilder... Die Bilder sind in Zeilen per Link abgespeichert. Ich brauch aber die Bilder, die per URL in den Zeilen gespeichert sind (mit ab und zu Leerzellen dazwischen) in Spalten sortiert und ohne Leerzeilen dazwischen.

Re: Leerzellen löschen! Nicht Zeilen! Spezielleres Problem!

Verfasst: Mo, 11.01.2021 15:01
von mikeleb
Hallo,
1) den Bereich markieren -> ausschneiden
2) in Zelle A1: ->Bearbeiten->Einfügen als... mit der Option "Transponieren"
3) jede Spalte (einzeln) sortieren

Re: Leerzellen löschen! Nicht Zeilen! Spezielleres Problem!

Verfasst: Mo, 11.01.2021 15:13
von 1a-zuhause
Servus, danke für die schnelle Antwort...

Das Transponieren kenn ich schon. Mir gehts eher darum die einzelnen Zellen raus zu bekommen ...

Das hab ich noch nicht hinbekommen...

Re: Leerzellen löschen! Nicht Zeilen! Spezielleres Problem!

Verfasst: Mo, 11.01.2021 15:24
von echo
Hallo
wenn ich das richtig lese, möchtest du Zeile für Zeile horizontal sortieren.
Das geht wenn du im Menü >Daten<>Sortieren< unter Optionen die Ausrichtung der Sortierung änderst.

Das müsstest du dann Zeile für zeile einzeln "anstoßen"

Gruß Holger

Re: Leerzellen löschen! Nicht Zeilen! Spezielleres Problem!

Verfasst: Mo, 11.01.2021 22:15
von 1a-zuhause
Hallo Holger,

darauf bin ich erst garnicht gekommen! Vielen Dank!

Jetzt habe ich die Zeilen sortiert...

Aber das Problem was jetzt auftritt ist, dass ich die Werte zwar jetzt dank dir zum Anstoßen bringen kann.
Die Werte in den Zellen dürfen aber von der Anordnung nicht verändert werden.

Ist verständlich was ich meine ?

LG und vielen Dank
Alex

Re: Leerzellen löschen! Nicht Zeilen! Spezielleres Problem!

Verfasst: Mo, 11.01.2021 22:32
von echo
Die Werte in den Zellen dürfen aber von der Anordnung nicht verändert werden.
Ist verständlich was ich meine ?
Hallo Alex
eigentlich nicht....
Wenn die Spalten zueinander "gehören" dann stimmt dein gewünschter "Sollzustand" nicht.

Entweder du sortierst Zeile für Zeile dann sind alle Zeilen (aufsteigend) sortiert (Siehe gewünschter Sollzustand)
oder
du markierst erst beide Zeilen und entscheidest dann welche Zeile die Sortierung vorgeben soll.
Dann bleibt die Spaltenweise Zuordnung bestehen aber dein Sollzustand kann nicht erreicht werden,
jeanie.gif
jeanie.gif (1.41 KiB) 2596 mal betrachtet
oder ich habe es nicht verstanden was du möchtest :)
Gruß Holger

Re: Leerzellen löschen! Nicht Zeilen! Spezielleres Problem!

Verfasst: Mo, 11.01.2021 23:02
von echo
Die Zellwerte sind immer unterschiedlich!
Soooo, wenn das erledigt ist müssen noch die Zeilen in Spalten umgewandelt werden. Sodass alle Werte einer Zeile untereinander in einer Spalte stehen, ohne Leerzellen dazwischen.
Nachtrag:
Ist die Liste nach einer Zeile sortiert, dann gibt es dort keine Leerzellen mehr.
Das "drehen" der Liste lässt sich einfach erledigen:
Markiere die Liste und wähle kopieren (Strg+C)
markiere eine leere Zelle unter der die kopierte Liste passt und wähle per Rechtsklick > Inhalte einfügen > [x] Transportieren > OK

Re: Leerzellen löschen! Nicht Zeilen! Spezielleres Problem!

Verfasst: Di, 12.01.2021 09:00
von Hiker
1a-zuhause hat geschrieben: Mo, 11.01.2021 14:24 Servus Community,

vielleicht seit ihr ja bisschen schlauer als ich :D ... Ich knobel seit Wochen an einem Problem, finde den Fehler aber nicht und kann es auch nicht lösen ...

Worum geht es?
Ich baue gerade an einem Konzept zur Verbesserung der Datenverarbeitung im E-Business Bereich.
Mein Vorschlag wäre ja zur Verbesserung der Datenverarbeitung ein passendes Tool zu verwenden.
Listen sind eigentlich ein typisches Lisp-Konstrukt, das man aber in allen Modernen Programmiersprachen wie z.B. Python findet. Listen in eine Tabelle zu packen ist ein origineller Ansatz zur Verbesserung der Datenverarbeitung...

Aber mal ernsthaft:
1a-zuhause hat geschrieben: Mo, 11.01.2021 14:24
Grundproblem:
Legende: # = Zelle hat Wert / +=Leerzelle
Ist-Zustand:
Zeilen der Form
A1 B2 C1 D1 E1 F1 G1 H1 I1 ...
# # # + # + + + #
# + + + # + # # +

Sollzustand:
A1 B2 C1 D1 E1 F1 G1 H1 I1 ...
# # # # # + + + +
# # # # + + + + +

Die Zellwerte sind immer unterschiedlich!
Als direkter Ansatz bietet sich ein Makro an, das
genau macht, was Du beschreibst. Jede Zeile durcharbeiten und bei leeren Zellen Inhalte von weiter rechts kopieren.
Meine Methode der Wahl, wenn man das dauernd in der Tabellenkalkulation machen muss.

Für gelegentliche Fälle würde ich (erstmal ein Backup machen), dann die Tabelle nach csv exportieren und sicherstellen, dass mein Trennzeichen nicht IN Zellen vorkommt - meist nehme ich Tab.
In einem Editor wie Notepad++ aufeinanderfolgende Tabs durch jeweils einen einzelnen Ersetzen - geht auch mit regulären Ausdrücken im Writer.
Modifizierte csv-Datei wieder in Calc laden, dabei darauf achten, dass beim Import nichts durch die automatische Typerkennung geändert wird.

Mfg, Jörn

PS: Als Kombination meiner beiden Kommentare könte man auf die Idee kommen ein Python Makro zu schreiben, dass jede Tabellenzeile in eine Liste kopiert, dann die Originalzeile leert und die Liste dann in die Zeile zurückkopiert...

Re: Leerzellen löschen! Nicht Zeilen! Spezielleres Problem!

Verfasst: Di, 12.01.2021 09:10
von Hiker
echo hat geschrieben: Mo, 11.01.2021 22:32
Die Werte in den Zellen dürfen aber von der Anordnung nicht verändert werden.
Ist verständlich was ich meine ?
...
oder ich habe es nicht verstanden was du möchtest ...
Gruß Holger
Im ersten Post stand noch, dass die Zellwerte immer unterschiedlich sein können.
Statt
# # # + # + + + #
# + + + # + # # +
ist der Ausgangszustand also z B.
a x c + f + + + f
s + + + f + d a +
und es sollen nur die + Zeichen (aka leere Zellen) nach rechts und die anderen (irgendwie gefüllten) Zellinhalte nach links - wenn ich das richtig verstehe

Mfg, Jörn

Re: Leerzellen löschen! Nicht Zeilen! Spezielleres Problem!

Verfasst: Di, 12.01.2021 10:06
von Stephan
finde den Fehler aber nicht
Welcher Fehler tritt auf?

Grundproblem:
Legende: # = Zelle hat Wert / +=Leerzelle
Ist-Zustand:
Zeilen der Form
A1 B2 C1 D1 E1 F1 G1 H1 I1 ...
# # # + # + + + #
# + + + # + # # +
.
.
.
Sollzustand:
A1 B2 C1 D1 E1 F1 G1 H1 I1 ...
# # # # # + + + +
# # # # + + + + +
.
z.B.:
-Zellbereich markieren, kopieren
-als unformatierten Text in Writer einfügen
-doppelte Tabulatoren suchen und durch einfache Tabulatoren ersetzen
-einfache Tabulatoren suchen und durch SEmikolon ersetzen
-alles markieren, kopieren
-in Calc einfügen
-per "Text in Spalten" wieder auf Spalten aufteilen
Soooo, wenn das erledigt ist müssen noch die Zeilen in Spalten umgewandelt werden. Sodass alle Werte einer Zeile untereinander in einer Spalte stehen, ohne Leerzellen dazwischen.
markieren, kopieren und transponiert einfügen


Gruß
Stephan

Re: Leerzellen löschen! Nicht Zeilen! Spezielleres Problem!

Verfasst: Mi, 13.01.2021 13:06
von Karolus
Hallo

Nun ich machs kurz, Zellbereich Selektieren und folgendes ausführen :

Code: Alles auswählen

from itertools import zip_longest


def remove_empty_and_transpose(*_):
    doc = XSCRIPTCONTEXT.getDocument()
    sel = doc.CurrentSelection
    sheet = sel.Spreadsheet
    cursor = sheet.createCursorByRange(sel)
    cursor.gotoStart()
    out = []
    for i in range(sel.Rows.Count):
        row = sel[i,:]
        row_out = []
        for datablock in row.queryContentCells(15):
            row_out.extend(datablock.DataArray[0])
        out.append(row_out)
    size = max(len(data) for data in out)
    out = list(map(list,zip_longest(*out,fillvalue=''))) 
    sel.clearContents(1+2+4+8)
    
    cursor.collapseToSize(len(out[0]), size)
    cursor.setDataArray(out)
    
vorher musst du den Code in den Pfad <deine Benutzerkonfiguration>/Scripts/python/<Name-deiner-Wahl>.py speichern.
achte bitte darauf das sämtliche Einrückungen so wie hier in der Python-datei ankommen.