in Calc per Makro Zellen in die erste freie Zeile der Spalte A
Moderator: Moderatoren
-
- *
- Beiträge: 17
- Registriert: Sa, 01.09.2018 21:32
in Calc per Makro Zellen in die erste freie Zeile der Spalte A
[gelöst]Hallo,
wie kann ich automatisch per Makro z.B. die Zellen BA1:BH1 in die erste freie Zeile der Spalte A.. kopieren ?
Direktes kopieren in z.B. BA6 funktioniert per Makro korrekt.
Zusätzlich sollte das Makro bei Änderung einer bestimmten Zelle z.B. "=Wenn(BB7=1;makro-start;"")" automatisch starten.
Würde mich über eine Lösung sehr freuen.
LG PeterausCalw
[gelöst]
wie kann ich automatisch per Makro z.B. die Zellen BA1:BH1 in die erste freie Zeile der Spalte A.. kopieren ?
Direktes kopieren in z.B. BA6 funktioniert per Makro korrekt.
Zusätzlich sollte das Makro bei Änderung einer bestimmten Zelle z.B. "=Wenn(BB7=1;makro-start;"")" automatisch starten.
Würde mich über eine Lösung sehr freuen.
LG PeterausCalw
[gelöst]
Zuletzt geändert von peterauscalw am So, 30.09.2018 18:39, insgesamt 2-mal geändert.
Re: in Calc per Makro Zellen in die erste freie Zeile der Spalte A
Hallo,
Zum Verständnis: Du möchstest die Zellen BA1:BH1 in eine Zeile X und dort in die Spalten BA bis BH kopieren. Das X ergibt sich daraus, dass es die erste Zeile der Spalte A ist, die leer ist. Richtig?
in die erste freie Zeile der Spalte A.. kopieren ?
Es scheint, als ob du bereits ein Makro laufen hast. Es wäre hilfreich, wenn du es hier posten würdest, damit die notwendigen Änderungen direkt eingebaut werden können (ansonsten wird es ein Rätselraten).Direktes kopieren in z.B. BA6 funktioniert per Makro korrekt.
Zum Verständnis: Du möchstest die Zellen BA1:BH1 in eine Zeile X und dort in die Spalten BA bis BH kopieren. Das X ergibt sich daraus, dass es die erste Zeile der Spalte A ist, die leer ist. Richtig?
Gruß,
mikeleb
mikeleb
-
- *
- Beiträge: 17
- Registriert: Sa, 01.09.2018 21:32
Re: in Calc per Makro Zellen in die erste freie Zeile der Spalte A
Hallo Nik,
nicht ganz, die Zellen BA1:BH1 sollen bei Öffnen des Calc-Document nach 40 sec in die erste freie Zeile der Spalte A kopiert werden.
Hintergrund der Aktion sind die nach 30 sec aktualisierten Daten der Verknüpfung mit einer csv Datei.
Im Anhang habe ich das vorhandene Dokument mit dem Makro "SUB dblogs" eingefügt.
Hoffe, daß ich mich dieses Mal etwas verständlicher ausgedrückt habe und freue mich auf den entscheidenden Tipp.
LG Peter
nicht ganz, die Zellen BA1:BH1 sollen bei Öffnen des Calc-Document nach 40 sec in die erste freie Zeile der Spalte A kopiert werden.
Hintergrund der Aktion sind die nach 30 sec aktualisierten Daten der Verknüpfung mit einer csv Datei.
Im Anhang habe ich das vorhandene Dokument mit dem Makro "SUB dblogs" eingefügt.
Hoffe, daß ich mich dieses Mal etwas verständlicher ausgedrückt habe und freue mich auf den entscheidenden Tipp.
LG Peter
- Dateianhänge
-
- dblog-testprot.ods
- (115.25 KiB) 189-mal heruntergeladen
Re: in Calc per Makro Zellen in die erste freie Zeile der Spalte A
Hallo,
wenn ich das Ganze richtig verstehe, möchtest du die Werte (nicht die Formeln!) aus BA1:BH1 in die erste freie Zeile (z. B. 166) und dort in die Spalten A bis H kopieren.
Die Zeitsteuerung wird eher knifflig (ich hätte da noch gar keinen richtigen Ansatz). Eine Wenn()-Funktion schafft es auch nicht. Man könnte allerdings eine Zelle überwachen und bei einem bestimmten Werte das Makro auslösen ...
Zum Kopieren der Werte reicht folgendes Makro:
Wie wäre es, das Makro durch eine Schaltfläche oder die Symbolleiste auszulösen?
wenn ich das Ganze richtig verstehe, möchtest du die Werte (nicht die Formeln!) aus BA1:BH1 in die erste freie Zeile (z. B. 166) und dort in die Spalten A bis H kopieren.
Die Zeitsteuerung wird eher knifflig (ich hätte da noch gar keinen richtigen Ansatz). Eine Wenn()-Funktion schafft es auch nicht. Man könnte allerdings eine Zelle überwachen und bei einem bestimmten Werte das Makro auslösen ...
Zum Kopieren der Werte reicht folgendes Makro:
Code: Alles auswählen
Sub wertekopieren
'Zugriff auf Dokument
odoc=ThisComponent
'Zugriff auf Tabelle
oTab=ThisComponent.Sheets.getByName("Anlagenprotokoll")
'Zugriff auf Zellen, deren Werte kopiert werden sollen
oQuelle=oTab.getCellRangeByName("BA1:BH1")
'Übernahme der Werte
aWerte=oQuelle.getDataArray
'Ermittlung der ersten freien Zeile in Spalte A
nZeile=oTab.Columns(0).queryEmptyCells.RangeAddresses(0).startrow
'Zielbereich festlegen
oZiel=oTab.getCellRangeByPosition(0,nZeile,7,nZeile)
'Werte schreiben
oZiel.setDataArray(aWerte)
End Sub
Gruß,
mikeleb
mikeleb
-
- *
- Beiträge: 17
- Registriert: Sa, 01.09.2018 21:32
Re: in Calc per Makro Zellen in die erste freie Zeile der Spalte A
Hallo mikeleb,
die Datei dblog-prot.ods möchte ich täglich um 22:00 Uhr per crontab starten um meine in mysql ermittelte Zählerstände (Stromzähler und PV-Ergebnisse) datum/Uhrzeit bezogen in die Tabelle zu schreiben - also komplett automatisch ohne Eingriff.
Die Prozedur wird zur Zeit mit dem Start eines Excel-Makros durchgeführt. Da dies in einem Raspi (als Ersatzgerät vorgesehen) nicht oder kaum realisierbar ist, möchte ich das mit LO calc durchführen.
Deinen Vorschlag werde ich auf jeden Fall versuchen umzusetzen, die zeitbedingte Frage habe ich eigentlich schon gelöst indem ich den Start des Makros mit "while" so lange verzögere bis die einstellbare Aktualisierung (zZt.30 sec) der Verknüpfung mit "erspi-log.csv erfolgt ist."
Erstmal ein danke für Deinen Tipp und werde Dich auf dem laufenden halten,
LG Peter
die Datei dblog-prot.ods möchte ich täglich um 22:00 Uhr per crontab starten um meine in mysql ermittelte Zählerstände (Stromzähler und PV-Ergebnisse) datum/Uhrzeit bezogen in die Tabelle zu schreiben - also komplett automatisch ohne Eingriff.
Die Prozedur wird zur Zeit mit dem Start eines Excel-Makros durchgeführt. Da dies in einem Raspi (als Ersatzgerät vorgesehen) nicht oder kaum realisierbar ist, möchte ich das mit LO calc durchführen.
Deinen Vorschlag werde ich auf jeden Fall versuchen umzusetzen, die zeitbedingte Frage habe ich eigentlich schon gelöst indem ich den Start des Makros mit "while" so lange verzögere bis die einstellbare Aktualisierung (zZt.30 sec) der Verknüpfung mit "erspi-log.csv erfolgt ist."
Erstmal ein danke für Deinen Tipp und werde Dich auf dem laufenden halten,
LG Peter
-
- *
- Beiträge: 17
- Registriert: Sa, 01.09.2018 21:32
Re: in Calc per Makro Zellen in die erste freie Zeile der Spalte A
Hallo mikeleb,
habe Probleme deinen Tipp in mein Makro einzufügen.
Hatte Dir ja meine Datei mit dem integrierten Makro gesendet, bin aber nicht sicher wo ich Dein Beispiel einfügen muss ?
LG Peter
habe Probleme deinen Tipp in mein Makro einzufügen.
Hatte Dir ja meine Datei mit dem integrierten Makro gesendet, bin aber nicht sicher wo ich Dein Beispiel einfügen muss ?
LG Peter
-
- *
- Beiträge: 17
- Registriert: Sa, 01.09.2018 21:32
Re: in Calc per Makro Zellen in die erste freie Zeile der Spalte A
Hallo,
hier nochmal der Einsprung in das makro dblogs :
sub dblogs
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 = "$BA$1"
dispatcher.executeDispatch(document, ".uno:GoToCell", "", 0, args1())
rem -------------------
wo muss Dein Vorschlag eingefügt werden ?
LG Peter
hier nochmal der Einsprung in das makro dblogs :
sub dblogs
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 = "$BA$1"
dispatcher.executeDispatch(document, ".uno:GoToCell", "", 0, args1())
rem -------------------
wo muss Dein Vorschlag eingefügt werden ?
LG Peter
Re: in Calc per Makro Zellen in die erste freie Zeile der Spalte A
Hallo,
meine Sub wertekopieren ersetzt nach meinem Verständnis deine Sub dblogs.
Allerdings versuchst du in dblogs irgendwie erst einmal Formeln in BA1 etc. zu schreiben. Warum?
meine Sub wertekopieren ersetzt nach meinem Verständnis deine Sub dblogs.
Allerdings versuchst du in dblogs irgendwie erst einmal Formeln in BA1 etc. zu schreiben. Warum?
Gruß,
mikeleb
mikeleb
-
- *
- Beiträge: 17
- Registriert: Sa, 01.09.2018 21:32
Re: in Calc per Makro Zellen in die erste freie Zeile der Spalte A
Hallo mikeleb,
der Hintergrund dafür war, daß bei jedem neuen starten des Dokuments im Index der Zellenbezug geändert wurde, z.B. :
=INDEX($AU$2:$AU$15;(VERGLEICH("tag";$AX$2:$AX$15;0)))
stand dann :
=INDEX($AU$9:$AU$20;(VERGLEICH("tag";$AX$9:$AX$20;0)))
also statt AU2:AU15 stand dann AU9:AU20 im Zellbezug.
obwohl bei schliessen des Dokument das Makro dblogl die Zellinhalte von AU2:AX20 löscht um bei starten des Dokuments die Aktualisierung
wieder in AU2 schreibt.
Deshalb habe ich das so versucht, daß der Formeleintrag beim starten auf Sollzustand geschrieben wird.
BG Peter
der Hintergrund dafür war, daß bei jedem neuen starten des Dokuments im Index der Zellenbezug geändert wurde, z.B. :
=INDEX($AU$2:$AU$15;(VERGLEICH("tag";$AX$2:$AX$15;0)))
stand dann :
=INDEX($AU$9:$AU$20;(VERGLEICH("tag";$AX$9:$AX$20;0)))
also statt AU2:AU15 stand dann AU9:AU20 im Zellbezug.
obwohl bei schliessen des Dokument das Makro dblogl die Zellinhalte von AU2:AX20 löscht um bei starten des Dokuments die Aktualisierung
wieder in AU2 schreibt.
Deshalb habe ich das so versucht, daß der Formeleintrag beim starten auf Sollzustand geschrieben wird.
BG Peter
-
- *
- Beiträge: 17
- Registriert: Sa, 01.09.2018 21:32
Re: in Calc per Makro Zellen in die erste freie Zeile der Spalte A
Hallo mikeleb,
erstmal ein ganz großes Danke
es funktioniert ganz klasse, habe noch ein "Wait ..." eingefügt um die Aktualisierung abzuwarten.
Habe das jetzt unter WIN10 getestet und werde das nun in meinem Raspi versuchen.
Hier gibt es zwar noch das Problem, daß ich die Verknüpfung nicht einrichten kann, aber das wird auch noch zum lösen sein.
Nochmal besten Dank und die Frage wie man die Frage als gelöst stellen kann ?
LG Peter
erstmal ein ganz großes Danke
es funktioniert ganz klasse, habe noch ein "Wait ..." eingefügt um die Aktualisierung abzuwarten.
Habe das jetzt unter WIN10 getestet und werde das nun in meinem Raspi versuchen.
Hier gibt es zwar noch das Problem, daß ich die Verknüpfung nicht einrichten kann, aber das wird auch noch zum lösen sein.
Nochmal besten Dank und die Frage wie man die Frage als gelöst stellen kann ?
LG Peter
Re: in Calc per Makro Zellen in die erste freie Zeile der Spalte A
Hallo Peter,
Um das Problem mit der Verknüpfung und Aktualisierung zu vereinfachen, würde ich gar nicht erst eine Verknüpfung einrichten, sondern per Makro die csv-Datei auslesen und die gewünschten Daten direkt an die richtige Stelle schreiben.
Wenn du verrätst, wie die csv aufgebaut ist und welche Daten daraus du wohin haben willst, kann es weiter gehen.
... indem du deinen ersten Post editierst, z. B. [gelöst] an das Thema hängstdie Frage wie man die Frage als gelöst stellen kann ?
Um das Problem mit der Verknüpfung und Aktualisierung zu vereinfachen, würde ich gar nicht erst eine Verknüpfung einrichten, sondern per Makro die csv-Datei auslesen und die gewünschten Daten direkt an die richtige Stelle schreiben.
Wenn du verrätst, wie die csv aufgebaut ist und welche Daten daraus du wohin haben willst, kann es weiter gehen.
Gruß,
mikeleb
mikeleb
-
- *
- Beiträge: 17
- Registriert: Sa, 01.09.2018 21:32
Re: in Calc per Makro Zellen in die erste freie Zeile der Spalte A
Hallo mikeleb,
bin wieder im Land.
Lege die erspi-dblog.csv direkt ab da das hinzufügen als .csv abgelehnt wird :
timestamp device value
2018-09-09 20:59:07 PV_tag 31.208
2018-09-09 20:59:01 E_ht 14353.616
2018-09-09 20:59:02 E_nt 102295.877
2018-09-09 20:59:03 PV_ges 35196.543
2018-08-20 23:26:34 IT_vhs 21.5
2018-09-09 21:00:06 PV_esp 25313.179
diese Daten werden über die Verknüpfung nach AU2:AX15 verbunden und über BA1:BH1 in die gewünschte Struktur gebracht und nach A... kopiert.
Habe das so gemacht weil die Reihenfolge der Daten in die erspi-dblog.csv durch die mysql Abfrage abweichend erfolgt.
Deshalb wollte ich nochmal Deinen Vorschlag aufgreifen, durch die Abfrage einer Zelle in der .ods das Makro zu starten.
Hier versuche ich gerade mit :
=jetzt() die aktuelle Uhrzeit in z.B. BH6
in BH7 möchte ich die gewünschte Startzeit 22:00 einstellen, und mit
=wenn(BH6=BH7;"1";"2") den abzufragenden Startpunkt definieren.
Klappt aber nicht, weil die Werte komplett unterschiedlich dargestellt werden :
=JETZT() = 21:22 20:00:00
43352,890380463 0,833333333333333
=wenn(BH6=BH7;"1";"2") = 2
Wahrscheinlich mache ich das alles ziemlich kompliziert. Bestimmt hast Du da eine bessere Idee.
LG Peter
bin wieder im Land.
Lege die erspi-dblog.csv direkt ab da das hinzufügen als .csv abgelehnt wird :
timestamp device value
2018-09-09 20:59:07 PV_tag 31.208
2018-09-09 20:59:01 E_ht 14353.616
2018-09-09 20:59:02 E_nt 102295.877
2018-09-09 20:59:03 PV_ges 35196.543
2018-08-20 23:26:34 IT_vhs 21.5
2018-09-09 21:00:06 PV_esp 25313.179
diese Daten werden über die Verknüpfung nach AU2:AX15 verbunden und über BA1:BH1 in die gewünschte Struktur gebracht und nach A... kopiert.
Habe das so gemacht weil die Reihenfolge der Daten in die erspi-dblog.csv durch die mysql Abfrage abweichend erfolgt.
Deshalb wollte ich nochmal Deinen Vorschlag aufgreifen, durch die Abfrage einer Zelle in der .ods das Makro zu starten.
Hier versuche ich gerade mit :
=jetzt() die aktuelle Uhrzeit in z.B. BH6
in BH7 möchte ich die gewünschte Startzeit 22:00 einstellen, und mit
=wenn(BH6=BH7;"1";"2") den abzufragenden Startpunkt definieren.
Klappt aber nicht, weil die Werte komplett unterschiedlich dargestellt werden :
=JETZT() = 21:22 20:00:00
43352,890380463 0,833333333333333
=wenn(BH6=BH7;"1";"2") = 2
Wahrscheinlich mache ich das alles ziemlich kompliziert. Bestimmt hast Du da eine bessere Idee.
LG Peter
Re: in Calc per Makro Zellen in die erste freie Zeile der Spalte A
Hallo Peter,
wenn du die Datei in erspi-dblog.csv.zip umbenennst sollte der Upload klappen.
AU2:AX15 sind 4 Spalten und 14 Zeilen. BA1:BH1 sind 1 Zeile und 8 Spalten. Welche Werte aus AU2:AX15 möchtest du in BA1:BH1 bzw. schlussendlich in Spalte A-H haben?
wenn du die Datei in erspi-dblog.csv.zip umbenennst sollte der Upload klappen.
AU2:AX15 sind 4 Spalten und 14 Zeilen. BA1:BH1 sind 1 Zeile und 8 Spalten. Welche Werte aus AU2:AX15 möchtest du in BA1:BH1 bzw. schlussendlich in Spalte A-H haben?
Ich vermute jetzt mal, dass die Datei rund um die Uhr offen ist?in BH7 möchte ich die gewünschte Startzeit 22:00 einstellen
Gruß,
mikeleb
mikeleb
-
- *
- Beiträge: 17
- Registriert: Sa, 01.09.2018 21:32
Re: in Calc per Makro Zellen in die erste freie Zeile der Spalte A
eigentlich nicht, die dblog-testprot.ods soll per crontab um 21:58 gestartet werden, die Daten von erspi-dblog.csv entgegennehmen und wieder mit save geschlossen werden.
-
- *
- Beiträge: 17
- Registriert: Sa, 01.09.2018 21:32
Re: in Calc per Makro Zellen in die erste freie Zeile der Spalte A
Hallo mikeleb,
Entschuldigung habe die vorherige Nachricht übersehen.
mit diesen Formeln :
=INDEX($AU$2:$AU$25;(VERGLEICH("tag";$AX$2:$AX$25;0)))
=INDEX($AV$2:$AV$25;(VERGLEICH("tag";$AX$2:$AX$25;0)))
=INDEX($AY$2:$AY$25;(VERGLEICH("ht";$AX$2:$AX$25;0)))
=INDEX($AY$2:$AY$25;(VERGLEICH("nt";$AX$2:$AX$25;0)))
usw.
hole ich die Daten aus dem verknüpften Bereich aus AU2:AX15 , somit habe ich immer den richtigen Wert in der vorgesehenen
Reihenfolge auf die zu kopierende Zeile ab Spalte A .
Gruß Peter
Entschuldigung habe die vorherige Nachricht übersehen.
mit diesen Formeln :
=INDEX($AU$2:$AU$25;(VERGLEICH("tag";$AX$2:$AX$25;0)))
=INDEX($AV$2:$AV$25;(VERGLEICH("tag";$AX$2:$AX$25;0)))
=INDEX($AY$2:$AY$25;(VERGLEICH("ht";$AX$2:$AX$25;0)))
=INDEX($AY$2:$AY$25;(VERGLEICH("nt";$AX$2:$AX$25;0)))
usw.
hole ich die Daten aus dem verknüpften Bereich aus AU2:AX15 , somit habe ich immer den richtigen Wert in der vorgesehenen
Reihenfolge auf die zu kopierende Zeile ab Spalte A .
Gruß Peter