Daten aus Datei 1, nach Datei 2 übertragen.

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

Moderator: Moderatoren

Benutzeravatar
balu
********
Beiträge: 3812
Registriert: Fr, 24.08.2007 00:28
Wohnort: Warstein

Daten aus Datei 1, nach Datei 2 übertragen.

Beitrag von balu »

Mahlzeit, meine Damen und Herren.

Lang ist es her, dass ich das letzte mal hier rein geschaut habe. :D

Folgendes Problem läßt sich nur mit Makro realisieren, weiss aber nicht wie. :roll:

Ich habe da zwei Dateien.
-> Eingabe
-> Verwaltung

Die Datei "Eingabe" besteht nur aus einem Blatt, in dem verschiedene Daten eingegeben werden. Wie z.B. Name, Dienst, Tätigkeit. Dies geschieht täglich. Ein neuer Tag, gleich neue eingaben in das selbe Blatt. Die Aufteilung dieses Blattes ist nicht besonderlich EDV geeignet, aber gut für die Optische Übersicht des Anwender.

Die Datei "Verwaltung" ist da bis jetzt ganz anders aufgebaut. Sie ist schon ehern EDV geeignet. Und in diese Datei sollen jetzt die Daten von der "Eingabe" übernommen werden. Und zwar nach folgendem Prinzip.

-> Datum in der "Eingabe" Datei suchen.
-> Das dazugehörige Datum in der "Verwaltung" suchen, und wenn es schon mit Text gefüllt ist, nicht überschreiben. Es sei denn, es gehört zu dem aktuellen Tag.
-> Wenn Datum vorhanden, aber leer ist, dann die Daten aus der "Eingabe" Datei" eintragen.

Mit anderen Worten.
Die "Verwaltung" wächst von Tag, zu Tag (innerhalb eines Kalenderjahres) immer weiter an. Während die "Eingabe" unverändert bleibt.


Wenn die "Eingabe" pro Tag ein Blatt hätte, dann liese sich das ja spielend mit einer =DDE()-Formel realisieren (schon getestet). Das funktioniert aber nicht bei nur einem Blatt, wo sich in diesem das Datum von Tag zu Tag ändert.


Ich hoffe, ich konnte mein anliegen ausreichend schildern. Im Anhang befinden sich diese zwei Dateien, um den Aufbau zu verdeutlichen.


Ich bin für eure Hilfe sehr dankbar. :D


Gruß
balu
Dateianhänge
Verwaltung.ods
(35.63 KiB) 61-mal heruntergeladen
Eingabe.ods
(23.29 KiB) 64-mal heruntergeladen
Sei öfter mal ein Faultier, sag öfter mal "Ach was!" Dann kriegst du keinen Herzinfarkt, und hast ne menge Spass.

wehr rächtschraipfähler findet khan si behalden :D
Benutzeravatar
balu
********
Beiträge: 3812
Registriert: Fr, 24.08.2007 00:28
Wohnort: Warstein

Re: Daten aus Datei 1, nach Datei 2 übertragen.

Beitrag von balu »

Hallo Leute,

im groben und ganzen haben sich meine Hauptwünsche, dank Jürgens Unterstützung :D , erledigt. Das einzige was noch fehlt, ist eine Überprüfung ob das Datum schon in der "Verwaltung" ausgefüllt ist. Das ist aber erst mal nicht so wichtig, kann vielleicht später noch mal ergänzt werden.
Was mich jetzt noch interessieren würde, wenn es nicht so komplex und kompliziert wäre, ist folgendes.
Wie, und wo, müsste der Code ergänzt werden, dass die "Verwaltung" die geöffnete "Eingabe" erst speichert, und dann die Daten ausliest?
Denn nach meinen bisheriegen Wissensstand muss ja erst die "Eingabe" gespeichert werden, bevor die "Verwaltung" auf die aktualisierten Daten zugreifen kann. Das Sahnehäuptchen wäre, wenn die "Eingabe" mit dem eingestellten Datum aus der Zelle K3 gespeichert werden könnte. :D

Hier ist der Code.
Achtung! Nicht vergessen den Pfad anzupassen!

Code: Alles auswählen

Public oDocSrc1  As Object
Public oDoc as Object
Public oDummy()
Public oDoc As Object
Public mydate as String
Public gefunden as String

Sub Copy_Aeras_2_Sheet_2
   on Error goto Ende
   GlobalScope.BasicLibraries.LoadLibrary("Tools")
   oDoc = thisComponent
    oComponents = StarDesktop.getComponents()
    myString = ""
    gefunden = ""
   oUrlSrc  = "file:///G:/Testordner/Eingabe.ods" 'Pfad zum Dokument anpassen
   
'############  Prüfen ob Dokument schon geöffnet, sonst öffnen ##################

   dim myFileProp(0) as New com.sun.star.beans.PropertyValue
    myFileProp(0).name="Hidden"
    myFileProp(0).value= true
    oComponentWalker = oComponents.createEnumeration()
    Do While oComponentWalker.hasMoreElements()
   oComponent = oComponentWalker.nextElement()
   if oComponent.getURL() = oUrlSrc then
   gefunden = true
   end if
   Loop   
   if gefunden = true then   
    oDocSrc1 = StarDesktop.loadComponentFromURL(oUrlSrc, "_default", 0, myFileProp() )
   else
   oDocSrc1 = StarDesktop.loadComponentFromURL(oUrlSrc, "_blank", 0, myFileProp())
   end if
   
'###############  Ende Prüfung  #############################

   oSheet = oDocSrc1.Sheets().getByName("31_08") 'Tabellenblatt 31_08 ansprechen
   oCellSrc = oSheet.getCellRangeByName("K3") 'Zelle holen
   myString = oCellSrc.string 'Zellinhalt holen
   myDate = Left(myString,5) ' 'Anfang des Datums filtern z.B. 06.09
   
   
   mySheet = oDoc.Sheets().getByName("Übersicht")' Tabellenblatt Übersicht ansprechen
   for i = 0 to 2500 'Spalte A durchlaufen und Datum suchen
    mycell = mysheet.getCellByPosition(0,i)
    myString = mycell.string
    if myString = myDate then 'wenn Datum gefunden
    myrow = mycell.CellAddress.Row + 1 'Zeilenindex auslesen > Startzeilen für Schreiben "Verwaltung"
   myrow2 = myrow + 5 'Zeilenindex  > Endzeilen für Schreiben "Verwaltung"
   goto weiter 'weil Datum gefunden Durchsuchen abbrechen und bei "Weiter:" weitermachen
   end if
   next i
   Weiter:
   
'################   Start Bereiche  Lesen  ######################

   aBereich = array ("C7:D12","G7:H12","K7:L12","C15:D20","C23:D28","C31:D36","G31:H36","K31:L36")
   For z = LBound(aBereich()) To UBound(aBereich()) 'Schleife für Array aBereich
   myRange = aBereich(z)'
   
   oRange1 = oDocSrc1.Sheets().getByIndex(0).getCellRangeByName(myRange) ' Bereich holen
   myHaus()= oRange1.getDataArray()' Bereich lesen
   

'################   Ende Bereich Lesen  ##########################

   
'################   Start Bereich Schreiben  #####################

   bZelle = Array ("C","F","I","L","O","R","U","X")'Startspalten für Schreiben "Verwaltung"
   cZelle = Array ("D","G","J","M","P","S","V","Y")'Endspalten für Schreiben "Verwaltung"
   
   myCell1 = bZelle(z)'Startspalte aus Array
   myCell2 = cZelle(z)'Endspalte aus Array

   oRange1 = ThisComponent.Sheets().getByIndex(0).getCellRangeByName(myCell1 & myrow & ":" & myCell2 & myrow2)'Array setzen
   oRange1.setDataArray(myHaus())'Array schreiben
   
   next z 'Schleife für Array aufrufen
   
'################   Ende Bereich Schreiben  ################################

   
   msgbox "Die Daten wurden erfolgreich übertragen" , 64, "Daten übertragen"
   if gefunden <> true then
   oDocSrc1.close (True)
   end if
   oDoc.currentController.Frame.ContainerWindow.toFront()
   exit sub
   Ende:
   msgbox "Das Datum wurde nicht gefunden!" , 48, "Daten übertragen"

End sub

Gruß
balu
Sei öfter mal ein Faultier, sag öfter mal "Ach was!" Dann kriegst du keinen Herzinfarkt, und hast ne menge Spass.

wehr rächtschraipfähler findet khan si behalden :D
turtle47
*******
Beiträge: 1849
Registriert: Mi, 04.01.2006 20:10
Wohnort: Rheinbach

Re: Daten aus Datei 1, nach Datei 2 übertragen.

Beitrag von turtle47 »

Hi Balu,
balu hat geschrieben:Wie, und wo, müsste der Code ergänzt werden, dass die "Verwaltung" die geöffnete "Eingabe" erst speichert, und dann die Daten ausliest
An dieser Stelle direkt nach dem öffnen:

Code: Alles auswählen

	oDocSrc1 = StarDesktop.loadComponentFromURL(oUrlSrc, "_blank", 0, myFileProp())
	end if
	oDocSrc1.Store(true)'Datei Speichern
'###############  Ende Prüfung  #############################
balu hat geschrieben:Denn nach meinen bisheriegen Wissensstand muss ja erst die "Eingabe" gespeichert werden, bevor die "Verwaltung" auf die aktualisierten Daten zugreifen kann
Das funktioniert auch ohne vorheriges speichern.
balu hat geschrieben:Das Sahnehäuptchen wäre, wenn die "Eingabe" mit dem eingestellten Datum aus der Zelle K3 gespeichert werden könnte
Meinst Du damit sowas zum Beispiel:

Code: Alles auswählen

Eingabe_18_09_2008.odt"
Mir ist sowieso Deine Vorgehensweise nicht ganz klar gewesen. Ist das Dokument Eingabe geöffnet oder nicht?
Deshalb hatte ich den Code ja so geschrieben, dass die "Eingabe.odt" im Hintergrund geöffnet und ausgelesen wird.

Boah, die Formatierung hier im Board nervt total ab. Besonders nach Satz- und Sonderzeichen ist das schlimm. :evil:

Jürgen
Software hat keinen Verstand - benutze deinen eigenen...!

Win 7 SP1/ LibreOffice 3.4.2 OOO340m1 (Build:203) / Firefox 15.0.1 / Notebook ASUS K70IO 64 Bit-Betriebssytem
Benutzeravatar
balu
********
Beiträge: 3812
Registriert: Fr, 24.08.2007 00:28
Wohnort: Warstein

Re: Daten aus Datei 1, nach Datei 2 übertragen.

Beitrag von balu »

Hallo Jürgen,

danke für deine antwort. :D
Und verzeih meine ungenauen angaben. :oops:

Erst mal wollte ich das generell begreifen, um dann im nächsten Schritt weiter aufzubauen. Das mit der zu öffnenden Datei soll sich eigentlich so gestallten (verhalten), und hoffe das sich dies ohne größere Probleme realisieren läßt.
Auf dem PC-1 befindet sich die "Verwaltung".
Auf dem PC-2 befindet sich die "Eingabe".
Also PC-1 fragt PC-2 ab, und speichert bei sich die Daten.
Sehe ich das jetzt richtig, das eigentlich nur der Pfad zu "Eingabe" auf PC-2 angepasst werden muss, oder muss da noch mehr geändert werden?
turtle47 hat geschrieben: Ist das Dokument Eingabe geöffnet oder nicht?
Das kann mal so, oder so sein. Meistens ist sie aber nicht geöffnet.


Ich habe da mal eben mit dem Status Hidden für die zu öffnende Datei ("Eingabe") gespielt. Bei Hidden habe ich meine schon beschriebene Beobachtung wieder bestätigt bekommen. Ich muss erst speichern, wenn ich die Namen und das Datum geändert habe. Jedoch bei Status VeryHidden und Visible brauche ich das nicht.

An dieser Stelle der Hinweis, dass ich unter Win-XP und OOo 2.2.1 getestet habe.
Und jetzt setze ich noch ein dickes und fettes Fragezeichen drauf.
  • ?
    Wo mache ich was falsch, dass bei OOo 2.4.1 (Portable) selbst der Status Hidden so funktioniert, wie VeryHidden und Visible? Nur bei OOo 2.2.1 funzt der Hidden NICHT wie erhofft. Obwohl beide Programme auf die gleiche Java-Runtime zugreifen!?
    Da ich aber heute sowieso nur "Bahnhof" verstehe, kann dieser Zug erst mal ruhig weiterfahren. Ich nehme später den nächsten.

Zu dem Dateinamen:

Code: Alles auswählen

Eingabe_18_09_2008.odt
Muss nicht unbedingt sein, es reicht einfach das Datum inklusive Erweiterung

Code: Alles auswählen

18_09_2008.odt
(oder so ähnlich)



Gruß
balu
Sei öfter mal ein Faultier, sag öfter mal "Ach was!" Dann kriegst du keinen Herzinfarkt, und hast ne menge Spass.

wehr rächtschraipfähler findet khan si behalden :D
Benutzeravatar
balu
********
Beiträge: 3812
Registriert: Fr, 24.08.2007 00:28
Wohnort: Warstein

Re: Daten aus Datei 1, nach Datei 2 übertragen.

Beitrag von balu »

Ja, das mit den Zitieren ist hier mitlerweile zu einem Glücksspiel geworden.
2 x bei "Antwort erstellen" auf Vorschau geklickt, und alles bestens. Beim dritten mal :twisted:
Es steckt nicht mal eine Logik dahinter. :roll:
Sei öfter mal ein Faultier, sag öfter mal "Ach was!" Dann kriegst du keinen Herzinfarkt, und hast ne menge Spass.

wehr rächtschraipfähler findet khan si behalden :D
turtle47
*******
Beiträge: 1849
Registriert: Mi, 04.01.2006 20:10
Wohnort: Rheinbach

Re: Daten aus Datei 1, nach Datei 2 übertragen.

Beitrag von turtle47 »

balu hat geschrieben:Es steckt nicht mal eine Logik dahinter
Doch.
turtle47 hat geschrieben:Besonders nach Satz- und Sonderzeichen ist das schlimm
Ich habe aber auch eine erfreuliche Nachricht für Dich.
Das Einlesen funktioniert auch über das Netzwerk. :lol:

Code: Alles auswählen

file://Compi/Testordner/Eingabe.ods
 
"Compi" ist der Name meines Desktoprechners wo ich den "Testordner" freigegeben habe und auf den ich im WLAN von meinem Laeppi aus zugegriffen habe.

Es ist auch egal ob die Datei "Eingabe" auf dem Desktop geöffnet oder noch geschlossen ist.
balu hat geschrieben:Ich muss erst speichern, wenn ich die Namen und das Datum geändert habe
Das habe ich jetzt leider auch bei oben genannten Versuch feststellen müssen. :(

Bei meinen vorherigen Versuchen, beide Dateien auf dem Stick mit Portable-OO.o 2.4.1 hatte ich damit keine Probleme.

Oder aber beide Dateien auf dem Laeppi mit OO.o 2.4.0 auch keine Probleme.

Das speichern der "Eingabe.ods" über das Netzwerk funktioniert auch noch nicht.
Bei

Code: Alles auswählen

oDocSrc1.Store(true)
 
kommt die vom mir eingebaute Fehlermeldung. Könnte noch eine Einstellung der Firewall oder der Freigabe des Ordners liegen, obwohl ich Ändern der Datei erlaubt habe.

Ist die "Eingabe.ods" jedoch geschlossen kommt es zu keiner Fehlermeldung.

Es bleibt also noch einiges zu tun, um das Kind ans Laufen zu kriegen.

Was hast Du noch rausgefunden?

Schöne Grüsse.

Jürgen
Software hat keinen Verstand - benutze deinen eigenen...!

Win 7 SP1/ LibreOffice 3.4.2 OOO340m1 (Build:203) / Firefox 15.0.1 / Notebook ASUS K70IO 64 Bit-Betriebssytem
Benutzeravatar
balu
********
Beiträge: 3812
Registriert: Fr, 24.08.2007 00:28
Wohnort: Warstein

Re: Daten aus Datei 1, nach Datei 2 übertragen.

Beitrag von balu »

Hallo Jürgen,

[OT]
Habe einen alten Beitrag rausgekramt,
Neuer Bug im Board? - Phantomquotes. Meine bisherigen Beobachtungen sagen mir, dass Satz- und Sonderzeichen bei mir nicht sehr viel damit zu tun haben. Ist halt mehr wie Lotto spielen.

[/OT]

Hab da noch eine generelle Frage, und zwar wegen der Pfadangabe. Aber bitte nicht hauen, weil ich da eine Anfängerfrage stelle :D
Ist der Padaufbau mit Slashs "/" in einem Makro unter Win und Linux identisch?


Hatte ich vergessen zu erwähnen.
Die Portable habe ich auf meinem Rechenknecht, nicht auf'm Stick.

Das mit der Pfadangabe für Netzwerk hatte ich mir schon beinahe gedacht, war mir aber noch nicht sicher. Dennoch danke ich dir für die Antwort. :D


WLAN-Netzwerk, Leppi,...
Oh-je-oh-je! :roll: Da muss ich ja auch noch ran. Kann erst am WE an den Leppi von meiner Schwester. Na dat wird wieder luschdich :twisted:
turtle47 hat geschrieben: Was hast Du noch rausgefunden?
Wohl nichts rausgefunden, aber da ich ja noch nicht das WLAN-Netz habe, habe ich da noch generelle fragen zu der MessageBox.
Wo wird die MessageBox eigentlich in einem Netzwerk angezeigt?
Denn nach meinen bisherigen Beobachtungen wird sie immer bei der auszulesenden Datei ("Eingabe") angezeigt (falls ich mich jetzt nicht doch einmal verguckt habe). Besser wäre es natürlich, wenn sie dort angezeigt wird, von wo das Makro gestartet wird ("Verwaltung"). Denn genau dort habe ich das Makro eingebunden.

Hatte mir schon mal vorhin gedacht, das vielleicht hier

Code: Alles auswählen

   oDocSrc1 = StarDesktop.loadComponentFromURL(oUrlSrc, "_blank", 0, myFileProp())
etwas geändert werden müsste. Hab es wegen Zeitmangel noch nicht getestet, aber würde es was bringen wenn z.B. "_blank" gegen einen anderen Parameter getauscht wird? Wenn ja, welcher müsste es denn sein? Oder müsste die Null getauscht werden?


Das Kind krabbelt aber schon sehr schön umher, und das ist doch schon mal was Wert. Nur wenn es richtig laufen kann, dann rennt es uns davon :mrgreen:



Schöne Grüße
balu
Sei öfter mal ein Faultier, sag öfter mal "Ach was!" Dann kriegst du keinen Herzinfarkt, und hast ne menge Spass.

wehr rächtschraipfähler findet khan si behalden :D
Benutzeravatar
balu
********
Beiträge: 3812
Registriert: Fr, 24.08.2007 00:28
Wohnort: Warstein

Re: Daten aus Datei 1, nach Datei 2 übertragen.

Beitrag von balu »

Hallo Jürgen,

turtle47 hat geschrieben: Das speichern der "Eingabe.ods" über das Netzwerk funktioniert auch noch nicht.
Bei

Code: Alles auswählen

    oDocSrc1.Store(true)
kommt die vom mir eingebaute Fehlermeldung.
Ich weiss dass ich hier ein "Dummie" bin :lol:, aber könnte es sein, das ich eingesetzt werden müsste? Denn auf der HP von "Michael Dannenhöfer" hatte ich da was im zusammenhang mit Datei Speichern und Dummy() gelesen. Kann aber auch sein, dass ich damit vollkommen daneben liege.


Gruß
balu
Sei öfter mal ein Faultier, sag öfter mal "Ach was!" Dann kriegst du keinen Herzinfarkt, und hast ne menge Spass.

wehr rächtschraipfähler findet khan si behalden :D
Benutzeravatar
balu
********
Beiträge: 3812
Registriert: Fr, 24.08.2007 00:28
Wohnort: Warstein

Re: Daten aus Datei 1, nach Datei 2 übertragen.

Beitrag von balu »

Ich habe jetzt selber herausgefunden, dass
balu hat geschrieben: Hatte mir schon mal vorhin gedacht, das vielleicht hier

Code: Alles auswählen

oDocSrc1 = StarDesktop.loadComponentFromURL(oUrlSrc, "_blank", 0, myFileProp())
 
etwas geändert werden müsste. Hab es wegen Zeitmangel noch nicht getestet, aber würde es was bringen wenn z.B. "_blank" gegen einen anderen Parameter getauscht wird? Wenn ja, welcher müsste es denn sein? Oder müsste die Null getauscht werden?
man theoretisch "_blank" gegen "_hidden" tauschen könnte, aber das würde nicht funzen. So wie Jürgen es schon hier

Code: Alles auswählen

dim myFileProp(0) as New com.sun.star.beans.PropertyValue
    myFileProp(0).name="Hidden"
    myFileProp(0).value= true
[...]
oDocSrc1 = StarDesktop.loadComponentFromURL(oUrlSrc, "_blank", 0, myFileProp())
 
eingesetzt hat, ist es richtig.
Sei öfter mal ein Faultier, sag öfter mal "Ach was!" Dann kriegst du keinen Herzinfarkt, und hast ne menge Spass.

wehr rächtschraipfähler findet khan si behalden :D
turtle47
*******
Beiträge: 1849
Registriert: Mi, 04.01.2006 20:10
Wohnort: Rheinbach

Re: Daten aus Datei 1, nach Datei 2 übertragen.

Beitrag von turtle47 »

Hi Balu,

da ich heute mal ein wenig Zeit habe, wollte ich mal nach dem Stand der Dinge erkundigen.
Also mein letzter Stand ist, dass das Speichern oder Schliessen einer Datei über das Netztwerk nicht möglich ist.
Das ist, wenn man mal weiter drüber nachdenkt, auch sinnvoll.

Man stelle sich vor, man arbeitet an einer Datei und "Hein Blöd" startet auf einem anderen Rechner ein Makro
und speichert bzw. schliesst das Dokument obwohl man das selber ja eigentlich gar nicht möchte. :shock:


Es bestätigt sich auch Deine Aussage, dass immer nur die Daten eingelesen welche vor dem letzten Speichern eingegeben waren.
Balu hat geschrieben:Das dazugehörige Datum in der "Verwaltung" suchen, und wenn es schon mit Text gefüllt ist, nicht überschreiben
Was soll denn dann passieren?

Schöne Grüsse.

Jürgen
Software hat keinen Verstand - benutze deinen eigenen...!

Win 7 SP1/ LibreOffice 3.4.2 OOO340m1 (Build:203) / Firefox 15.0.1 / Notebook ASUS K70IO 64 Bit-Betriebssytem
Benutzeravatar
balu
********
Beiträge: 3812
Registriert: Fr, 24.08.2007 00:28
Wohnort: Warstein

Re: Daten aus Datei 1, nach Datei 2 übertragen.

Beitrag von balu »

Hallo Jürgen,
turtle47 hat geschrieben:
Balu hat geschrieben:Das dazugehörige Datum in der "Verwaltung" suchen, und wenn es schon mit Text gefüllt ist, nicht überschreiben
Was soll denn dann passieren?
Also das war mehr eine Überlegung vor dem jetzigen Wissensstand. Da ich ja beim eröffnen des Threads "null-komma-null" Ahnung von Basic hatte (jetzt stehts bei "eins-komma-null"), war ich von einer falschen Überlegung ausgegangen. Also brauchen wir uns darum keine gedanken mehr machen. :wink:

Es ist nur momentan recht ärgerlich, dass ich das WLAN-Netz noch nicht hinbekomme. Denn dadurch kann ich ja selber noch nicht prüfen, was passiert wenn ich den Status für die zu öffnende Datei ändere. Aber das Netz problem bekomme ich auch noch in den griff, demnächst. :evil:

turtle47 hat geschrieben: Also mein letzter Stand ist, dass das Speichern oder Schliessen einer Datei über das Netztwerk nicht möglich ist.
Das muss ja auch nicht mehr, da ich ja mitlerweile begriffen habe, dass das Problem nicht am Status_Hidden liegt, sondern an der 2.2.1er OOo Version. Denn die 2.4.1 verhält sich ja bei dem benannten Status so wie erhofft. Also wird geupdatet, und wech is dat problemchen :D .

Ich sag an dieser Stelle erst mal ein recht herzliches Danke schön für deine Hilfe und Unterstützung. :D
Wenn ich nicht mehr weiterkomme, dann meld ich mich wieder.


Gruß

balu
Sei öfter mal ein Faultier, sag öfter mal "Ach was!" Dann kriegst du keinen Herzinfarkt, und hast ne menge Spass.

wehr rächtschraipfähler findet khan si behalden :D
Antworten