Wir sind auf Ihre Unterstützung angewiesen!
💚 BITTE helfen Sie uns HEUTE mit einer SPENDE 💚
Helfen Sie das LibreOffice Forum zu erhalten!
> KEINE WERBUNG FÜR REGISTRIERTE BENUTZER!<
Ihre Spende wird für die Deckung der laufenden Kosten sowie den Erhalt und Ausbau 🌱 des LibreOffice Forums verwendet.
🤗 Als Dankeschön werden Sie im Forum als LO-SUPPORTER gekennzeichnet. 🤗
Datum kleiner als 01.01.2017 und weiteres
Datum kleiner als 01.01.2017 und weiteres
Hallo Zusammen,
ich bin an meiner ersten Makroprogrammierung dran und habe auch schon einiges hinbekommen, aber an 3 Stellen hapert es noch.
Es soll eine csv-Datei geöffnet, bearbeitet und wieder als csv in utf-8 gespeichert werden.
Was ich bis jetzt hinbekommen habe ist das Löschen von Spalten und Zeilen und das Hinzufügen und Befüllen von einer Spalte.
Was noch nicht klappt ist das Löschen von Zeilen nach Datum.
In der Spalte E soll nach dem Datum gesucht werden, welches älter wie der 1.1.2017 ist und die entsprechende Zeile gelöscht werden.
Dazu habe ich folgendes zusammengebastelt:
sub loesche_wenn_datum
oSheet = ThisComponent.CurrentController.getActiveSheet()
oCursor = oSheet.CreateCursor
oCursor.GotoEndOfUsedArea(false)
nEndrow = oCursor.Rangeaddress.EndRow
dim oCell as Date
for i = nEndrow to 0 step - 1
oCell = oSheet.GetCellByPosition(4,i)'1 entspricht Spalte E
if (oCell.date < "01.01.2017") then
oSheet.Rows.RemoveByIndex(i,1)
endif
next i
end sub
Leider wird dabei nach längerer Wartezeit der gesamte Inhalt der Datei gelöscht,
was sicher (auch) mit dem nicht richtigen Format des Datums sowohl in der Spalte als auch im Makro zu tun hat.
Die restlichen Sachen wären das Importieren der csv und das funktioniert schon von Hand nur so,
wenn das Makro unter "Meine Makros & Dialoge" liegt, auch mit kompletten Lockern der Makroschutzrichtlinien.
Das Speichern soll, wie gesagt wieder in csv in utf-8 mit demselben Dateinamen plus "_bearbeitet" sein.
Für das Öffnen und Speichern habe ich bis jetzt noch gar keine brauchbaren Ansätze, wobei das auch unter die Kategorie nice to have fällt.
Das Wichtigste wäre also die Datumsgeschichte.
Und wenn ihr mir da etwas auf die Sprünge helfen könntet wäre das eine richtig coole Sache.
ich bin an meiner ersten Makroprogrammierung dran und habe auch schon einiges hinbekommen, aber an 3 Stellen hapert es noch.
Es soll eine csv-Datei geöffnet, bearbeitet und wieder als csv in utf-8 gespeichert werden.
Was ich bis jetzt hinbekommen habe ist das Löschen von Spalten und Zeilen und das Hinzufügen und Befüllen von einer Spalte.
Was noch nicht klappt ist das Löschen von Zeilen nach Datum.
In der Spalte E soll nach dem Datum gesucht werden, welches älter wie der 1.1.2017 ist und die entsprechende Zeile gelöscht werden.
Dazu habe ich folgendes zusammengebastelt:
sub loesche_wenn_datum
oSheet = ThisComponent.CurrentController.getActiveSheet()
oCursor = oSheet.CreateCursor
oCursor.GotoEndOfUsedArea(false)
nEndrow = oCursor.Rangeaddress.EndRow
dim oCell as Date
for i = nEndrow to 0 step - 1
oCell = oSheet.GetCellByPosition(4,i)'1 entspricht Spalte E
if (oCell.date < "01.01.2017") then
oSheet.Rows.RemoveByIndex(i,1)
endif
next i
end sub
Leider wird dabei nach längerer Wartezeit der gesamte Inhalt der Datei gelöscht,
was sicher (auch) mit dem nicht richtigen Format des Datums sowohl in der Spalte als auch im Makro zu tun hat.
Die restlichen Sachen wären das Importieren der csv und das funktioniert schon von Hand nur so,
wenn das Makro unter "Meine Makros & Dialoge" liegt, auch mit kompletten Lockern der Makroschutzrichtlinien.
Das Speichern soll, wie gesagt wieder in csv in utf-8 mit demselben Dateinamen plus "_bearbeitet" sein.
Für das Öffnen und Speichern habe ich bis jetzt noch gar keine brauchbaren Ansätze, wobei das auch unter die Kategorie nice to have fällt.
Das Wichtigste wäre also die Datumsgeschichte.
Und wenn ihr mir da etwas auf die Sprünge helfen könntet wäre das eine richtig coole Sache.
Zuletzt geändert von oiram am Do 29. Jun 2017, 12:16, insgesamt 1-mal geändert.
Re: Datum kleiner als 01.01.2017 und weiteres
Das Speichern hätte sich erledigt, ist zwar derselbe Name, aber wenn man die Datei vorher umbenennt ist das auch ok.
Und wenn man beim öffnen auf utf-8 umstellt geht das auch
dim document as object
dim dispatcher as object
document = ThisComponent.CurrentController.Frame
dispatcher = createUnoService("com.sun.star.frame.DispatchHelper")
dispatcher.executeDispatch(document, ".uno:Save", "", 0, Array())
Und wenn man beim öffnen auf utf-8 umstellt geht das auch
dim document as object
dim dispatcher as object
document = ThisComponent.CurrentController.Frame
dispatcher = createUnoService("com.sun.star.frame.DispatchHelper")
dispatcher.executeDispatch(document, ".uno:Save", "", 0, Array())
Re: Datum kleiner als 01.01.2017 und weiteres
Hallo,
die Code-Zeile
ist nicht sinnvoll, da durch
oCell ein Objekt und kein Date-Struct darstellt (führt bei mir zu einer Fehlermeldung).
führt bei mir auch zum Fehler, da der Zellwert nicht als Date-Struct vorliegt.
Ich würde den Code so ändern:
die Code-Zeile
Code: Alles auswählen
dim oCell as Date
Code: Alles auswählen
oCell = oSheet.GetCellByPosition(4,i)'1 entspricht Spalte E
Code: Alles auswählen
Cell.date
Ich würde den Code so ändern:
Code: Alles auswählen
sub loesche_wenn_datum
oSheet = ThisComponent.CurrentController.getActiveSheet()
oCursor = oSheet.CreateCursor
oCursor.GotoEndOfUsedArea(false)
nEndrow = oCursor.Rangeaddress.EndRow
for i = nEndrow to 0 step - 1
oCell = oSheet.GetCellByPosition(4,i)'4 entspricht Spalte E
if cdate(oCell.value) < cdate("01.01.2017") then
oSheet.Rows.RemoveByIndex(i,1)
endif
next i
end sub
Gruß,
mikele
mikele
Re: Datum kleiner als 01.01.2017 und weiteres
Hallo mikele,
danke für deine Antwort.
Leider habe ich hier den gleichen Effekt, es wird alles gelöscht.
Nun habe ich von Hand die Spalte als Datum formatiert (ursprünglich ist es ja Text).
Danach habe ich aber ein ' drin: '18.3.2008
Jetzt wäre die Frage, wie kann ich die Spalte automatisch auf Datum (TT.MM.JJJJ) umsetzen und das ' rauslöschen.
Mit der Makroaufzeichnung habe ich für das Datumsformat folgendes gefunden:
Allerdings muss ich hierbei vorher die Spalte markieren oder ich mache es so:
Hier gefällt mir die genaue Bezeichnung des Zellen nicht, aber damit könnte ich leben.
Bei der Entfernung von dem Strich erhalte dann sowas:
Und das ist dann nicht wirklich was was funzt...
Hättest Du oder jemand anderes noch eine Idee wie ich die Striche entweder gar nicht rein bekomme oder sie löschen kann?
danke für deine Antwort.
Leider habe ich hier den gleichen Effekt, es wird alles gelöscht.
Nun habe ich von Hand die Spalte als Datum formatiert (ursprünglich ist es ja Text).
Danach habe ich aber ein ' drin: '18.3.2008
Jetzt wäre die Frage, wie kann ich die Spalte automatisch auf Datum (TT.MM.JJJJ) umsetzen und das ' rauslöschen.
Mit der Makroaufzeichnung habe ich für das Datumsformat folgendes gefunden:
Code: Alles auswählen
sub datum
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 = "NumberFormatValue"
args1(0).Value = 36
dispatcher.executeDispatch(document, ".uno:NumberFormatValue", "", 0, args1())
end sub
Code: Alles auswählen
sub datum2
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 = "ToPoint"
args1(0).Value = "$E$2:$E$500000"
dispatcher.executeDispatch(document, ".uno:GoToCell", "", 0, args1())
rem ----------------------------------------------------------------------
dim args2(0) as new com.sun.star.beans.PropertyValue
args2(0).Name = "NumberFormatValue"
args2(0).Value = 36
dispatcher.executeDispatch(document, ".uno:NumberFormatValue", "", 0, args2())
end sub
Bei der Entfernung von dem Strich erhalte dann sowas:
Code: Alles auswählen
sub datum3
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 = "StringName"
args1(0).Value = "24.2.2010"
dispatcher.executeDispatch(document, ".uno:EnterString", "", 0, args1())
rem ----------------------------------------------------------------------
dim args2(0) as new com.sun.star.beans.PropertyValue
args2(0).Name = "StringName"
args2(0).Value = "9.3.2007"
dispatcher.executeDispatch(document, ".uno:EnterString", "", 0, args2())
end sub
Hättest Du oder jemand anderes noch eine Idee wie ich die Striche entweder gar nicht rein bekomme oder sie löschen kann?
Re: Datum kleiner als 01.01.2017 und weiteres
Hallo,
da gibt es mehrere Möglichkeiten:
HIer ein Codeschnipsel, dessen Werte in der Zeileich beim Export íns CSV Format aufgenommen habe:
Hier wird Spalte E als Datum geladen.
HTH R
da gibt es mehrere Möglichkeiten:
HIer ein Codeschnipsel, dessen Werte in der Zeile
Code: Alles auswählen
Args(1).Value = "59,34,76,1,,0,false,true,true"
Code: Alles auswählen
Sub S_load_csv_insert_EK_store_csv
Dim Args(1) as New com.sun.star.beans.PropertyValue
sURL = converttourl("C:\Users\USER\Desktop\TEST.csv") ' <------ Dateipfad der zu ladenden Datei
Args(0).Name = "FilterName"
Args(0).Value ="Text - txt - csv (StarCalc)"
Args(1).Name = "FilterOptions"
Args(1).Value = "59,34,76,1,,0,false,true,true"
odoc = StarDesktop.loadComponentFromURL(sURL,"_blank", 0, Args)
End sub
HTH R
Windows 10: AOO, LO Linux Mint: AOO, LO
Re: Datum kleiner als 01.01.2017 und weiteres
Hallo F3K,
danke für deine Antwort.
Leider verstehe ich im ersten Augenblick nur ziemlich viel Bahnhof.
Für mich ist das widersprüchlich: "beim Export ins CSV" und "Dateipfad der zu ladenden Datei"??
Meinst Du wenn die Datei auf diese Weise gespeichert wird, dann öffnet man sie das nächste mal mit der Spalte E im Datumsformat
oder heißt das wenn man sie so öffnet dann ist die Spalte E im Datumsformat?
Wo wird die Spalte E definiert - beim öffnen ist die benötigte Spalte noch nicht E...
danke für deine Antwort.
Leider verstehe ich im ersten Augenblick nur ziemlich viel Bahnhof.
Für mich ist das widersprüchlich: "beim Export ins CSV" und "Dateipfad der zu ladenden Datei"??
Meinst Du wenn die Datei auf diese Weise gespeichert wird, dann öffnet man sie das nächste mal mit der Spalte E im Datumsformat
oder heißt das wenn man sie so öffnet dann ist die Spalte E im Datumsformat?
Wo wird die Spalte E definiert - beim öffnen ist die benötigte Spalte noch nicht E...
Re: Datum kleiner als 01.01.2017 und weiteres
ok, alles gut, es geht um das Öffnen und es werden alle Spalten mit Datum als Datum definiert.
Gibt es irgendwo eine Übersicht mit den Bedeutungen dieser Zahlen?
Gibt es irgendwo eine Übersicht mit den Bedeutungen dieser Zahlen?
Re: Datum kleiner als 01.01.2017 und weiteres
Hallo Zusammen,
es läuft jetzt alles sehr gut bis auf eine Kleinigkeit
der Teil mit dem Datum löscht auch die erste Zeile, in der die Überschriften stehen:
Wie kann ich die Zeile mit den Überschriften ausklammern?
es läuft jetzt alles sehr gut bis auf eine Kleinigkeit
der Teil mit dem Datum löscht auch die erste Zeile, in der die Überschriften stehen:
Code: Alles auswählen
sub loesche_wenn_datum
oSheet = ThisComponent.CurrentController.getActiveSheet()
oCursor = oSheet.CreateCursor
oCursor.GotoEndOfUsedArea(false)
nEndrow = oCursor.Rangeaddress.EndRow
for i = nEndrow to 0 step - 1
oCell = oSheet.GetCellByPosition(4,i)'4 entspricht Spalte E
if cdate(oCell.value) < cdate("01.01.2017") then
oSheet.Rows.RemoveByIndex(i,1)
endif
next i
end sub
Re: Datum kleiner als 01.01.2017 und weiteres
Hallo
……………………for i = nEndrow to 1 step - 1
Na vielleicht indem du den Schleifenindex statt bis 0, eben nur bis 1 laufen lässt.Wie kann ich die erste Zeile ausklammern?
……………………for i = nEndrow to 1 step - 1
LO7.4.7.2 debian 12(bookworm) auf Raspberry4b 8GB (64bit)
LO7.6.3.2 flatpak debian 12(bookworm) auf Raspberry4b 8GB (64bit)
LO7.6.3.2 flatpak debian 12(bookworm) auf Raspberry4b 8GB (64bit)
Re: Datum kleiner als 01.01.2017 und weiteres
Hallo,
https://wiki.openoffice.org/wiki/Docume ... er_OptionsGibt es irgendwo eine Übersicht mit den Bedeutungen dieser Zahlen?
Gruß,
mikele
mikele
An alle, die das LibreOffice-Forum nutzen:
Bitte beteiligen Sie sich mit 7 Euro pro Monat und helfen uns bei unserem Budget für das Jahr 2024.
Einfach per Kreditkarte oder PayPal.
Als Dankeschön werden Sie im Forum als LO-SUPPORTER gekennzeichnet.
❤️ Vielen lieben Dank für Ihre Unterstützung ❤️