in Calc per Makro Zellen in die erste freie Zeile der Spalte A

Programmierung unter AOO/LO (StarBasic, Python, Java, ...)

Moderator: Moderatoren

peterauscalw
*
Beiträge: 17
Registriert: Sa, 01.09.2018 21:32

in Calc per Makro Zellen in die erste freie Zeile der Spalte A

Beitrag von peterauscalw »

[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]
Zuletzt geändert von peterauscalw am So, 30.09.2018 18:39, insgesamt 2-mal geändert.
mikeleb
*******
Beiträge: 1315
Registriert: Fr, 09.12.2011 16:50

Re: in Calc per Makro Zellen in die erste freie Zeile der Spalte A

Beitrag von mikeleb »

Hallo,
in die erste freie Zeile der Spalte A.. kopieren ?
Direktes kopieren in z.B. BA6 funktioniert per Makro korrekt.
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).
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
peterauscalw
*
Beiträge: 17
Registriert: Sa, 01.09.2018 21:32

Re: in Calc per Makro Zellen in die erste freie Zeile der Spalte A

Beitrag von peterauscalw »

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
Dateianhänge
dblog-testprot.ods
(115.25 KiB) 185-mal heruntergeladen
mikeleb
*******
Beiträge: 1315
Registriert: Fr, 09.12.2011 16:50

Re: in Calc per Makro Zellen in die erste freie Zeile der Spalte A

Beitrag von mikeleb »

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:

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
Wie wäre es, das Makro durch eine Schaltfläche oder die Symbolleiste auszulösen?
Gruß,
mikeleb
peterauscalw
*
Beiträge: 17
Registriert: Sa, 01.09.2018 21:32

Re: in Calc per Makro Zellen in die erste freie Zeile der Spalte A

Beitrag von peterauscalw »

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
peterauscalw
*
Beiträge: 17
Registriert: Sa, 01.09.2018 21:32

Re: in Calc per Makro Zellen in die erste freie Zeile der Spalte A

Beitrag von peterauscalw »

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
peterauscalw
*
Beiträge: 17
Registriert: Sa, 01.09.2018 21:32

Re: in Calc per Makro Zellen in die erste freie Zeile der Spalte A

Beitrag von peterauscalw »

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
mikeleb
*******
Beiträge: 1315
Registriert: Fr, 09.12.2011 16:50

Re: in Calc per Makro Zellen in die erste freie Zeile der Spalte A

Beitrag von mikeleb »

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?
Gruß,
mikeleb
peterauscalw
*
Beiträge: 17
Registriert: Sa, 01.09.2018 21:32

Re: in Calc per Makro Zellen in die erste freie Zeile der Spalte A

Beitrag von peterauscalw »

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
peterauscalw
*
Beiträge: 17
Registriert: Sa, 01.09.2018 21:32

Re: in Calc per Makro Zellen in die erste freie Zeile der Spalte A

Beitrag von peterauscalw »

Hallo mikeleb,
erstmal ein ganz großes Danke :lol:
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
mikeleb
*******
Beiträge: 1315
Registriert: Fr, 09.12.2011 16:50

Re: in Calc per Makro Zellen in die erste freie Zeile der Spalte A

Beitrag von mikeleb »

Hallo Peter,
die Frage wie man die Frage als gelöst stellen kann ?
... indem du deinen ersten Post editierst, z. B. [gelöst] an das Thema hängst
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
peterauscalw
*
Beiträge: 17
Registriert: Sa, 01.09.2018 21:32

Re: in Calc per Makro Zellen in die erste freie Zeile der Spalte A

Beitrag von peterauscalw »

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
mikeleb
*******
Beiträge: 1315
Registriert: Fr, 09.12.2011 16:50

Re: in Calc per Makro Zellen in die erste freie Zeile der Spalte A

Beitrag von mikeleb »

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?
in BH7 möchte ich die gewünschte Startzeit 22:00 einstellen
Ich vermute jetzt mal, dass die Datei rund um die Uhr offen ist?
Gruß,
mikeleb
peterauscalw
*
Beiträge: 17
Registriert: Sa, 01.09.2018 21:32

Re: in Calc per Makro Zellen in die erste freie Zeile der Spalte A

Beitrag von peterauscalw »

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.
peterauscalw
*
Beiträge: 17
Registriert: Sa, 01.09.2018 21:32

Re: in Calc per Makro Zellen in die erste freie Zeile der Spalte A

Beitrag von peterauscalw »

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
Antworten