Daten in eine andere Tabelle schreiben (andere Datei)

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

Moderator: Moderatoren

Luis2
Beiträge: 3
Registriert: Fr, 25.12.2020 18:38

Daten in eine andere Tabelle schreiben (andere Datei)

Beitrag von Luis2 »

Libreoffice 7.0.1.2 (x64)
Betriebssystem Windows 10


Hallo in die Runde,

vielleicht kann mir jemand helfen oder einen Hinweis geben wo ich ein Beispiel suche. Experimentiere jetzt schon stundenlang und komme zu keiner Lösung! Libre Makros sind mir ein großes Rätsel :-( .


Folgendes Problem:
Ich möchte mit einem Makro in der Datei Rechnung.ods (Tabelle "Rechnung") den String aus der Zelle A1 in eine andere ods Datei (Verlauf.ods) speichern.

Hintergrund: In A1 von Rechnung.ods steht der Name der aktellen Rechnungsdatei mit Nummer Datum usw und ich möchte in Verlauf.ods den Verlauf die History meiner Rechnungen archivieren

Also das Makro müsste in Verlauf.ods noch in Spalte A nach unten den ersten freien Platz finden und dort den String aus Rechnung.ods Tabellenblatt "Rechnung" Zelle A1 ablegen.

Vielen Dank für jegliche Hilfe

Luis
F3K Total
********
Beiträge: 3704
Registriert: Mo, 28.02.2011 17:49

Re: Daten in eine andere Tabelle schreiben (andere Datei)

Beitrag von F3K Total »

Moin,
wenn die beiden Dateien sich im gleichen Ordner befinden, sollte folgendes Makro funktionieren, Beispieldateien anbei.
Sollte die Datei "Verlauf.ods" nicht geöffnet sein, wird sie im Hintergrund geöffnet, beschrieben, gespeichert und wieder geschlossen.
Ist sie geöffnet, wird die Zeile zugefügt.

Code: Alles auswählen

Sub Copy_A1_to_Verlauf
    oDocument = ThisComponent
    oSheet = oDocument.Sheets.getbyName("Rechnung")
    oCell = oSheet.getcellbyposition(0,0)
    sFile = oCell.String
    bopen = false
    oComponentsEnumeration = StarDeskTop.Components.createEnumeration
    while oComponentsEnumeration.hasmoreelements
       odoc = oComponentsEnumeration.nextElement
       if odoc.Title = "Verlauf.ods" then
           oDocVerlauf = odoc
           bopen = true
       endif
    wend
    if bopen = false then
        dim args(0) as new com.sun.star.beans.PropertyValue
        args(0).Name = "Hidden"
        args(0).Value = false
        sFolderUrl = replace(oDocument.Url,oDocument.Title,"")
        sUrlVelauf = sFolderUrl & "Verlauf.ods"
        oDocVerlauf = StarDeskTop.loadComponentFromUrl(sUrlVelauf,"_blank",0,args())
    endif
    oTargetSheet = oDocVerlauf.Sheets.getbyname("Tabelle1")
    oTargetRow = oTargetSheet.Columns.getbyName("A")
    oEmptyCells = oTargetRow.queryemptyCells
    nStartrow = oEmptyCells.RangeAddresses(0).StartRow
    otargetCell = oTargetRow.getcellbyPosition(0,nStartrow)
    otargetCell.String = sFile
    oDocVerlauf.Store
    if bopen = false then
        oDocVerlauf.close -1
    endif
End Sub
Gruß R
Dateianhänge
Verlauf.ods
(7.88 KiB) 87-mal heruntergeladen
Rechnung.ods
(11.57 KiB) 86-mal heruntergeladen
Luis2
Beiträge: 3
Registriert: Fr, 25.12.2020 18:38

Re: Daten in eine andere Tabelle schreiben (andere Datei)

Beitrag von Luis2 »

Danke F3K Total

das funktioniert sehr gut, war direkt ein kleines Weihnachtsgeschenk ;-)

Ein Problem hätte ich noch ich will vorher (wenn es von der Logik her besser ist ginge es auch anschließend) die Vorlagedatei rechnung.ods (oder ich benutze besser das Format ots) unter NEUEM Namen in einem ANDEREN Ordner abspeichern. Das funktioniert schon mit dem Makro:

Code: Alles auswählen

Sub Rechnung_speichern
blatt = ThisComponent.CurrentController.ActiveSheet
	With blatt
		tmp = .getCellRangeByName("v12").String 
	End With 
    tmp2 = InputBox ("Bitte kontrolliere den Dateinamen: ","Lieber Benutzer", tmp)
    ThisComponent.storeAsUrl(ConvertToURL(tmp2), Array())

End Sub
Mit der InputBox habe ich noch die Möglichkeit den Dateinamen zu ändern

Jetzt geht´s leider nicht mehr mit deinem Makrovorschlag, weil ja die Ausgangsdatei nicht mehr rechnung.ods heißt und die Verlauf.ods nicht mehr im selben Ordner liegt.
Kann ich die 2 Makros sinnvoll miteinander kombinieren, dass alles in einem Rutsch funktioniert?
Also die Rechnung speichern und die Daten in die Verlauf.ods eintragen

Viele Grüße
Luis
Stephan
********
Beiträge: 12369
Registriert: Mi, 30.06.2004 19:36
Wohnort: nahe Berlin

Re: Daten in eine andere Tabelle schreiben (andere Datei)

Beitrag von Stephan »

Jetzt geht´s leider nicht mehr mit deinem Makrovorschlag, weil ja die Ausgangsdatei nicht mehr rechnung.ods heißt und die Verlauf.ods nicht mehr im selben Ordner liegt.
dann verwende halt:

Code: Alles auswählen

ThisComponent.storeToUrl(ConvertToURL(tmp2), Array())
statt:

Code: Alles auswählen

ThisComponent.storeAsUrl(ConvertToURL(tmp2), Array())
denn dann ist weiterhin die ursprüngliche Datei sichtbar.

z.B. siehe:
http://www.dannenhoefer.de/faqstarbasic ... chern.html

Das wäre hier im Konkreten wohl der eleganteste Weg.
Es gibt aber auch alternative Wege die Du selbst leicht finden könntest, wenn Du Dir die Mühe machen würdest zu verstehen was der Code von "F3K Total" tut.




Gruß
Stephan
F3K Total
********
Beiträge: 3704
Registriert: Mo, 28.02.2011 17:49

Re: Daten in eine andere Tabelle schreiben (andere Datei)

Beitrag von F3K Total »

Bitte,
habe noch einen kleinen Fehler entdeckt, damit die Datei Verlauf.ods wie beschrieben ggf. im Hintergrund geöffnet wird, muss im Code statt

Code: Alles auswählen

Hidden = false
natürlich

Code: Alles auswählen

Hidden = true
stehen.

Gruß R
Luis2
Beiträge: 3
Registriert: Fr, 25.12.2020 18:38

Re: Daten in eine andere Tabelle schreiben (andere Datei)

Beitrag von Luis2 »

Herzlichen Dank,

Ihr habt mir sehr geholfen!

Gruß Luis
Antworten