Calc: Leere Spalten in einem markierten Bereich finden

Moin.

Hintergrund der Frage:
Ich verwende bei umfangreicheren Verwaltungsaufgaben/Normalisierung
meiner Kontaktdaten aus dem Smartphone (iPhone) eine Tabelle (XLS),
weil man so viel flotter editieren kann als in den grafischen
Interfaces der entsprechenden App.
Von der Verwendung von regulären Ausdrücken mal ganz abgesehen.

Praktisch wäre es, wenn ich alle leeren Spalten in einem markierten
Bereich finden könnte - um sie dann zu löschen.
Das würde die Übersicht sehr erleichtern.

Kennt ihr dafür einen Weg (Makro, Plugin)?

Danke.

Andreas

Hallo

Moin.

Hintergrund der Frage:
Ich verwende bei umfangreicheren Verwaltungsaufgaben/Normalisierung
meiner Kontaktdaten aus dem Smartphone (iPhone) eine Tabelle (XLS),
weil man so viel flotter editieren kann als in den grafischen
Interfaces der entsprechenden App.
Von der Verwendung von regulären Ausdrücken mal ganz abgesehen.

Praktisch wäre es, wenn ich alle leeren Spalten in einem markierten
Bereich finden könnte - um sie dann zu löschen.
Das würde die Übersicht sehr erleichtern.

Kennt ihr dafür einen Weg (Makro, Plugin)?

Nichts leichter als das:(Achtung python)

Werner Tietz schrieb:

Praktisch wäre es, wenn ich alle leeren Spalten in einem markierten
Bereich finden könnte - um sie dann zu löschen.
Das würde die Übersicht sehr erleichtern.

Kennt ihr dafür einen Weg (Makro, Plugin)?

Nichts leichter als das:(Achtung python)
#######################
def remove_empty_cols():
     doc = XSCRIPTCONTEXT.getDocument()
     sel = doc.CurrentSelection
     empties = reversed( list( sel.queryEmptyCells() ) )
     for erange in empties:
         erange.Columns.removeByIndex(0,erange.Columns.Count)
#######################

Dankeschön erstmal :slight_smile:

Kann man dieses Pythonskript so wie es ist als Libreoffice-Makro
verwenden?

Andreas

Hallo Andreas,

hast Du schon probiert, die Filter einzuschalten und nur die leeren Zeilen darstellen zu lassen? Diese können dann ganz einfach gelöscht werden.

Gruß

Jochen

Ja natürlich!
Werner

Jochen Schiffers schrieb:

hast Du schon probiert, die Filter einzuschalten und nur die leeren
Zeilen darstellen zu lassen? Diese können dann ganz einfach gelöscht werden

Du meinst mit Filter "Menü Daten > Weitere Filter", richtig?

Dann verstehe ich noch nicht, wie man dort "leere Spalten" (nicht
Zeilen) einstellen kann.

Andreas

Hallo Andreas,

schicke mir bitte doch mal eine Mini-Muster-Datei per PM zu. Ich gucke mir dann Dein Problem mal an.

Gruß

Jochen

Jochen Schiffers schrieb:

schicke mir bitte doch mal eine Mini-Muster-Datei per PM zu. Ich gucke
mir dann Dein Problem mal an.

https://www.dropbox.com/s/0k2b1dh3tacrv59/calc-leere-spalten-finden.ods

Die einzige leere Spalte in der Tabelle ist Spalte D.
Sie soll gefunden werden, damit ich dann löschen kann.

Die Originaltabelle ist selbstverständlich sehr viel umfangreicher.

Ich hatte noch folgenden Text gefunden:
http://www.worldstart.com/openoffice-org-calc-removing-blank-rows-from-your-data/

Aber der Filter findet in meiner Tabelle keine leeren Spalten, was
mich auch gewundert hätte.
Denn man gibt ja nirgendwo das Kriterium "Spalte" an.

Andreas

Andreas Borutta schrieb:

Jochen Schiffers schrieb:

schicke mir bitte doch mal eine Mini-Muster-Datei per PM zu. Ich gucke
mir dann Dein Problem mal an.

https://www.dropbox.com/s/0k2b1dh3tacrv59/calc-leere-spalten-finden.ods

Mit Jochen konnte ich per PM klären, dass Filtern die Aufgabe nicht
lösen kann. Danke an dieser Stelle für Deinen Versuch, Jochen.

Es wäre eine manuell Prüfung nötig. Und eine solche soll eben gerade
nicht stattfinden.

Werners Makro probiere ich später aus und werde berichten.

Andreas

Wenns Dir nicht auf die Reihenfolge der Einträge an kommt, einfach
sortieren.

Alternativ fallen mir spontan noch ein:

- bedingte Formatierung (Formel: A1&B1&C1="" o. ä.), und die
entsprechenden Zellen z. B mit rotem Hintergrund (Formatvorlage!)
belegt; musst dann aber manuell suchen

- Filter (Hilfsspalte, in der obige Formel steht, und dann ein "X" o. ä.
ausgibt); aber Vorsicht, da markiert man gern mal zu viel, nämlich die
ausgeblendeten Zeilen mit ... :frowning:

Wolfgang

Wolfgang Jäth schrieb:

Hintergrund der Frage:
Ich verwende bei umfangreicheren Verwaltungsaufgaben/Normalisierung
meiner Kontaktdaten aus dem Smartphone (iPhone) eine Tabelle (XLS),
weil man so viel flotter editieren kann als in den grafischen
Interfaces der entsprechenden App.
Von der Verwendung von regulären Ausdrücken mal ganz abgesehen.

Praktisch wäre es, wenn ich alle leeren Spalten in einem markierten
Bereich finden könnte - um sie dann zu löschen.
Das würde die Übersicht sehr erleichtern.

Wenns Dir nicht auf die Reihenfolge der Einträge an kommt, einfach
sortieren.

So habe ich mir bisher - umständlich und zeitaufwändig - Spalte für
Spalte geholfen.
Mit absteigender Sortierung. So kann man sehen, ob es in einer auf den
ersten Blick beim vielfachen Scrollen leeren Spalte doch noch Einträge
gibt.

Alternativ fallen mir spontan noch ein:

- bedingte Formatierung (Formel: A1&B1&C1="" o. ä.), und die
entsprechenden Zellen z. B mit rotem Hintergrund (Formatvorlage!)
belegt; musst dann aber manuell suchen

Eben: das manuelle Suchen, besonders das Scrollen in sehr Tabellen mit
vielen Zeilen, ist zeitaufwändig.

- Filter (Hilfsspalte, in der obige Formel steht, und dann ein "X" o. ä.
ausgibt); aber Vorsicht, da markiert man gern mal zu viel, nämlich die
ausgeblendeten Zeilen mit ... :frowning:

Zu riskant. Und auch hier wäre ja eine manuelle Kontrolle nötig.

Es geht ja um viele Spalten.

Ist eben Pech, dass es keine Funktion gibt "Wenn alle Zellen in Spalte
leer, dann Formatvorlage Rot".

Andreas

Werner Tietz schrieb:

Nichts leichter als das:(Achtung python)
#######################
def remove_empty_cols():
     doc = XSCRIPTCONTEXT.getDocument()
     sel = doc.CurrentSelection
     empties = reversed( list( sel.queryEmptyCells() ) )
     for erange in empties:
         erange.Columns.removeByIndex(0,erange.Columns.Count)
#######################

Dankeschön erstmal :slight_smile:

Kann man dieses Pythonskript so wie es ist als Libreoffice-Makro
verwenden?

Ja natürlich!

Ich muss noch rausfinden, wie man ein Python-Makro erstellt.

Bei "Menü Extras > Makros verwalten > Python" ist der Button
"Erstellen" ausgegraut.

Andreas

Andreas Borutta schrieb:

Praktisch wäre es, wenn ich alle leeren Spalten in einem markierten
Bereich finden könnte - um sie dann zu löschen.
Das würde die Übersicht sehr erleichtern.

Kennt ihr dafür einen Weg (Makro, Plugin)?

Da die Anzahl der Zeilen bekannt ist, nehmen wir mal an es sind 511,
könnte man vielleicht über eine Calc-Funktion die Anzahl der leeren
Zellen pro Spalte zählen und bei einem Ergebnis "Leere Zellen pro
Spalte = 511" einen Text in Zeile 512 ausgeben.

Ist erstmal nur eine unreife Idee.

Andreas

Werner Tietz schrieb:

Nichts leichter als das:(Achtung python)
#######################
def remove_empty_cols():
     doc = XSCRIPTCONTEXT.getDocument()
     sel = doc.CurrentSelection
     empties = reversed( list( sel.queryEmptyCells() ) )
     for erange in empties:
         erange.Columns.removeByIndex(0,erange.Columns.Count)
#######################

Dankeschön erstmal :slight_smile:

Kann man dieses Pythonskript so wie es ist als Libreoffice-Makro
verwenden?

Ja natürlich!

Ich muss noch rausfinden, wie man ein Python-Makro erstellt.

Du musst im Ordner 'Scripts' deiner Benutzerkonfiguration einen neuen Ordner 'python' erstellen und dahinein eine einfache Textdatei mit z.B. dem Namen 'calctools.py' und dem offensichtlichen Inhalt von oben hineinkopieren.

Raketenwissenschaft??
Werner

Werner Tietz schrieb:

Ich muss noch rausfinden, wie man ein Python-Makro erstellt.

Du musst im Ordner 'Scripts' deiner Benutzerkonfiguration

https://wiki.documentfoundation.org/UserProfile/de

Im Ordner
/Users/****/Library/Application Support/LibreOffice/4
gibt es keinen Unterordner "Scripts".

Ich werde heute abend nochmal weiter suchen.

Aus Neugier:

Bei "Menü Extras > Makros verwalten > Python" ist der Button
"Erstellen" ausgegraut.

Gibt es denn einen Grund dafür, dass das Erstellen über die GUI nicht
möglich ist?

Andreas

Andreas Borutta schrieb:

Ich muss noch rausfinden, wie man ein Python-Makro erstellt.

Du musst im Ordner 'Scripts' deiner Benutzerkonfiguration

https://wiki.documentfoundation.org/UserProfile/de

Im Ordner
/Users/****/Library/Application Support/LibreOffice/4
gibt es keinen Unterordner "Scripts".

Ich werde heute abend nochmal weiter suchen.

OK. Ich habe den Ordner "Scripts" angelegt.

/Users/****/Library/Application
Support/LibreOffice/4/user/Scripts/python/calctools.py

Jetzt wird Dein Makro auch bei "Menü Extras > Makro ausführen"
gelistet.

Wenn ich es auf die markierte Tabelle (das hier in der Mailingliste
bereits erwähnte Testcase)
https://www.dropbox.com/s/0k2b1dh3tacrv59/calc-leere-spalten-finden.ods
anwende, löscht es alle Zellen und nicht nur die Spalte D.

Andreas

Hallo

Wenn ich es auf die markierte Tabelle (das hier in der Mailingliste
bereits erwähnte Testcase)
https://www.dropbox.com/s/0k2b1dh3tacrv59/calc-leere-spalten-finden.ods
anwende, löscht es alle Zellen und nicht nur die Spalte D.

Ich hatte dein Anliegen so verstanden, daß du _eine_ Zeile markierst,
(im Beispiel A1:E1) und darauf dann Spalte B und D gelöscht werden.

Wenn bei dir nur komplett leere Spalten im selektierten Bereich gelöscht werden sollen muss das anders:

Werner Tietz schrieb:

Wenn bei dir nur komplett leere Spalten im selektierten Bereich gelöscht
werden sollen muss das anders:

#####################################

def remove_complete_empty_cols():

[...]

Damit klappte es perfekt!

Ganz herzlichen Dank, Werner! :slight_smile:

Ich fände es ja toll, wenn es diese Bereinigungsfunktion als Befehl in
LO schaffen würde, damit sie für viele Nutzer leicht verfügbar ist.

Ergänzt durch "remove_complete_empty_rows()"

Freue mich sehr über Dein Skript!

Schönen Tag, Andreas

Hallo

Ich fände es ja toll, wenn es diese Bereinigungsfunktion als Befehl in
LO schaffen würde, damit sie für viele Nutzer leicht verfügbar ist.

Ergänzt durch "remove_complete_empty_rows()"

Nein, mit der gleichen Berechtigung könnten 500+ weitere Funktionen ins Menü 'gequetscht' werden … die unvermeidliche Folge dessen wäre eine komplett unbedienbare _Menühölle_

Werner Tietz schrieb:

Ich fände es ja toll, wenn es diese Bereinigungsfunktion als Befehl in
LO schaffen würde, damit sie für viele Nutzer leicht verfügbar ist.

Ergänzt durch "remove_complete_empty_rows()"

Nein, mit der gleichen Berechtigung könnten 500+ weitere Funktionen ins
Menü 'gequetscht' werden … die unvermeidliche Folge dessen wäre eine
komplett unbedienbare _Menühölle_

Wenn man in dieser Argumentation bleibt, dürfte es überhaupt keine
mächtigen, funktionsreichen Anwendungen mehr geben.

Ich sehe den Konflikt natürlich, aber ich ziehe andere
Schlussfolgerungen daraus.

Schon vor vielen Jahren habe ich hier mal vorgeschlagen, dass es schön
wäre, wenn Nutzer sich bei der Installation für mehr als eine
Oberfläche entscheiden können.

Übersichtlich, wenige Funktionen.
Reichhaltig, alle Funktionen.

Und ergänzend dazu eine ausgeprägte Auslagerung von Funktionsblöcken
in Form von Plugins.

Aber lassen wir das Thema. Damit wäre ich hier eh völlig alleine.

Andreas