"Leere" Zeilen bei Ausgabe in CSV unterdrücken?

Das Tabellenkalkulationsprogramm

Moderator: Moderatoren

hylli
*******
Beiträge: 1672
Registriert: Mi, 22.02.2006 19:37

"Leere" Zeilen bei Ausgabe in CSV unterdrücken?

Beitrag von hylli »

Ich erstellen gerade eine Art Mitgliedsdatenbank auf Basis eines Calc-Dokuments. Auf verschiedenen Tabellen werden dabei die Daten gepflegt.

Auf einer zentralen Tabelle, werden die Daten aus verschiedenen Tabellen per Funktionen zusammengeführt, hier eine beispielhafte Funktion:

Code: Alles auswählen

=WENN(ISTLEER(Mitgliederdaten.B4);"";Mitgliederdaten.B4&" "&Mitgliederdaten.C4)
Mein Problem:
Wie kann ich es vermeiden, dass beim Export der Tabelle augenscheinliche Leerzeilen mit exportiert werden?

So sieht der Export aktuell aus:
Mitglieds-Nr.;Name;Vorname;Straße;PLZ;Ort;...
101;Mustermann;Max;Musterstr. 1;99999;Musterstadt;...
102;Musterfrau;Heidi;Musterstr. 2;99999;Musterstadt;...
;;;;;;...
;;;;;;...
;;;;;;...
;;;;;;...
usw.
Meines Erachtens wird das doppelte Anführungszeichen "" nicht als leer interpretiert.

Wie kann ich also Leerzeilen beim Export ausschließen bzw. wie sage ich einer Zelle, dass diese tatsächlich leer ist, wenn eine Bedingung zutrifft?

Hylli :)
Ein Dankeschön für eine Lösung tut nicht weh!
Wer eine Lösung selbst findet, sollte die für die Nachwelt auch posten!

Geschäftlich: LibreOffice 6.0.x ("Still") unter Windows 10 64bit
Privat: LibreOffice 6.0.x ("Still") unter Linux Mint 19.x Cinnamon 64bit
Karolus
********
Beiträge: 7532
Registriert: Mo, 02.01.2006 19:48

Re: "Leere" Zeilen bei Ausgabe in CSV unterdrücken?

Beitrag von Karolus »

Hallo

Vor dem Export:
→Daten→Filter→Standardfilter mit der Bedingung »nicht leer« und Ausgabe in ein neues Tabellenblatt

Karolus
LO7.4.7.2 debian 12(bookworm) auf Raspberry5 8GB (ARM64)
LO25.2.3.2 flatpak debian 12(bookworm) auf Raspberry5 8GB (ARM64)
hylli
*******
Beiträge: 1672
Registriert: Mi, 22.02.2006 19:37

Re: "Leere" Zeilen bei Ausgabe in CSV unterdrücken?

Beitrag von hylli »

Also diesen Zwischenschritt würde ich natürlich gerne vermeiden, aber nichtsdestotrotz habe ich das gerade mal getestet (AOO 3.4.0) und nun wird's kurios.

Beim Filtern auf ein Feld mit der Bedingung = "-nicht leer-" und Ausgabe auf ein neues Tabellenblatt, werden nur die Werte der ersten beiden Spalten übergeben?!?

Exportiere ich aber testweise diese neue Tabelle, bleiben meine ungewollten Leerzeilen auch weiterhin erhalten.

Edit:
Der Umweg über Kopieren der besagten Tabelle bzw. des relevanten Bereiches und "Inhalte einfügen" ohne Formeln in eine neue Tabelle, würde zwar funktionieren, aber auch diesen Schritt würde ich gerne vermeiden wollen.

Hylli
Ein Dankeschön für eine Lösung tut nicht weh!
Wer eine Lösung selbst findet, sollte die für die Nachwelt auch posten!

Geschäftlich: LibreOffice 6.0.x ("Still") unter Windows 10 64bit
Privat: LibreOffice 6.0.x ("Still") unter Linux Mint 19.x Cinnamon 64bit
hylli
*******
Beiträge: 1672
Registriert: Mi, 22.02.2006 19:37

Re: "Leere" Zeilen bei Ausgabe in CSV unterdrücken?

Beitrag von hylli »

Also ich wollte zwar alles ohne Makros machen, habe das jetzt mal per Makro gelöst.

Per Makroaufzeichnung habe ich die "berechnete" Tabelle kopiert und in eine bereits erstellte Tabelle per "Inhalte einfügen" ohne Formeln eingefügt. Damit sind die unerwünschten Leerzeilen beim Export in CSV dann weg.

Dank diesem Beitrag habe ich dann gleich auch den Export mit ins Makro gepackt. Musste den Code zwecks Format und Pfad nur geringfügig anpassen.

Das ganze Makro sieht aktuell so aus:

Code: Alles auswählen

REM  *****  BASIC  *****


sub Main
rem ----------------------------------------------------------------------
rem define variables
dim document   as object
dim dispatcher as object
rem ----------------------------------------------------------------------
rem get access to the document
document   = ThisComponent.CurrentController.Frame
dispatcher = createUnoService("com.sun.star.frame.DispatchHelper")

rem ----------------------------------------------------------------------
dim args1(0) as new com.sun.star.beans.PropertyValue
args1(0).Name = "Nr"
args1(0).Value = 4

dispatcher.executeDispatch(document, ".uno:JumpToTable", "", 0, args1())

rem ----------------------------------------------------------------------
dim args2(0) as new com.sun.star.beans.PropertyValue
args2(0).Name = "ToPoint"
args2(0).Value = "$Onlinebanking.$A$1:$V$200"

dispatcher.executeDispatch(document, ".uno:GoToCell", "", 0, args2())

rem ----------------------------------------------------------------------
dispatcher.executeDispatch(document, ".uno:Copy", "", 0, Array())

rem ----------------------------------------------------------------------
dim args4(0) as new com.sun.star.beans.PropertyValue
args4(0).Name = "Nr"
args4(0).Value = 5

dispatcher.executeDispatch(document, ".uno:JumpToTable", "", 0, args4())

rem ----------------------------------------------------------------------
dim args5(0) as new com.sun.star.beans.PropertyValue
args5(0).Name = "ToPoint"
args5(0).Value = "$A$1"

dispatcher.executeDispatch(document, ".uno:GoToCell", "", 0, args5())

rem ----------------------------------------------------------------------
dim args6(5) as new com.sun.star.beans.PropertyValue
args6(0).Name = "Flags"
args6(0).Value = "SVDNT"
args6(1).Name = "FormulaCommand"
args6(1).Value = 0
args6(2).Name = "SkipEmptyCells"
args6(2).Value = false
args6(3).Name = "Transpose"
args6(3).Value = false
args6(4).Name = "AsLink"
args6(4).Value = false
args6(5).Name = "MoveMode"
args6(5).Value = 4

dispatcher.executeDispatch(document, ".uno:InsertContents", "", 0, args6())

rem ------------- Speichern als CSV --------------

Dim myProps(1) as New com.sun.star.beans.PropertyValue
sPath="/home/marco/Dokumente/Onlinebanking/Lastschtriftvorlagen.csv"
sUrl=ConvertToUrl (sPath)
myProps(0).Name = "FilterName"
myProps(0).Value ="Text - txt - csv (StarCalc)"
myProps(1).Name="FilterOptions"
myProps(1).Value ="59/9,34,33,1,1/1/2/1" 'string mit den Optionen
myDoc = thisComponent
myDoc.storeAsUrl(sUrl,myProps())
End Sub
Das Makro lässt sich mit Sicherheit noch kürzen, insbesondere der aufgezeichnete Teil. Für meine Zwecke würde es aber ausreichen.

Ein Hinweis auf Speicherort und Dateiname nach Speichern wäre natürlich hübsch, noch besser, wenn man den Speicherort und Namen selbst festlegen könnte.

Schade aber, dass es keine einfache Lösung ohne Makro gibt, wäre mir lieber gewesen.

Hylli
Ein Dankeschön für eine Lösung tut nicht weh!
Wer eine Lösung selbst findet, sollte die für die Nachwelt auch posten!

Geschäftlich: LibreOffice 6.0.x ("Still") unter Windows 10 64bit
Privat: LibreOffice 6.0.x ("Still") unter Linux Mint 19.x Cinnamon 64bit
Antworten