Kopieren zwischen 2 Dokumenten

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

Moderator: Moderatoren

erikafuchs
******
Beiträge: 690
Registriert: Di, 13.02.2007 17:38
Wohnort: Büttelborn

Kopieren zwischen 2 Dokumenten

Beitrag von erikafuchs »

Hi Leute,
weit bin ich nicht mit meinen Programmierfähigkeiten. Ich bastele ein Rechenprogramm für Schüler, dafür fällt mir ständig was Neues ein oder ich finde Fehler (Es ist noch im Gammastadium). Meine Schüler werden nach der ersten Version ständig neue Versionen bekommen. Auf einem Tabellenblatt werden die erreichten Leistungen gespeichert und die sollen in die neue Version kopiert werden. Nach Öffnen der Version "neu" können die Schüler (mit Hilfe des Dateiauswahlfeldes) ihre Version "alt" wählen jetzt soll das Makro in aus der Version "alt" den Bereich A1:H9 auf Tabellenblatt "Daten" kopieren und in der Version "neu" in den gleichen Bereich einfügen. Ich bin schon so weit, dass beide Versionen gleichzeitig geöffnet sind, wie kann ich jetzt mit CopyRange(oZiel, oQuelle) kopieren? Oder geht das so gar nicht? Außerdem möchte ich, dass im oben genannten Dateiauswahlfeld schon der Ordner in dem die Version "neu" ist angezeigt wird (das wird bei meinen Schülern mal der USB Stick, der Ordner im Schulnetz oder der Ordner auf dem Privaten Computer sein) mit:

oDateiURL=ThisComponent.URL
tDialog.getControl("Dateiauswahl").text=oDateiURL
tDialog.execute()
tDateiURL=tDialog.getControl("Dateiauswahl").text

eingetragen, das sieht dann im Dateiauswahlfenster aber zB. so aus:

ile:///D:/Schule/Mathematik/Rechentrainer/rechentrainer%20Beta%200.42.ods

Ich möchte aber in dem Fenster den Inhalt des Ordners sehen und nicht nur den Programmnamen, ich vermute, ich muss dafür den rechten Teil bis zum "/" loswerden, wie geht das, wenn das Programm immer eine neue Nummer bekommt? Noch besser wäre es ich hätte eine Ordenstruktur zum Blättern - geht das auch (für Anfänger)?

Grüße und Dank für die Mühe von
Pit

(Wer will das Programm schon mal ausprobieren?)
Toxitom
********
Beiträge: 3769
Registriert: Di, 12.08.2003 18:07
Wohnort: Wiesbaden
Kontaktdaten:

Re: Kopieren zwischen 2 Dokumenten

Beitrag von Toxitom »

Hey Pit,

man sollte sich nicht zu viel vornehmen....

Ja, geht alles, vielleicht nicht gerade so, wie du dir das vorstellst. Und vieles ist einfahc auch Übungssache, Erfahrung.

Wenn du beide Dokumente offen hast - dan hast du doch auch die Objekte der beiden Dokumente. Also: Datenarray aus Dokument 1 auslesen und in Dokument 2 einfügen. Wo ist das Problem?

Zum zweiten Problem: Weisst du überhaupt, wie Pfadangaben intern verwaltet werden? Die Funktion ConvertFromURL bzw. ConvertToURL wandeln diese internen Angaben in lesbare Pfade um - und umgekehrt.
Das Dateiauswahl-Kontrollelement ist nichts anders als ein Textfeld mit angefügten Button, der den internen Dateiauswahl-Dialog aufruft. Schliesst man den wieder, wird der gewählte Dateiname im Textfeld angezeigt. Die Funktionen sind rudimentär - keine filter möglich etc. Willst du also etwas "gescheites", so nimm gleich den Dateiauswahl-Dialog - und bau dir den so zurecht, dass er passt.
Schreibst du im Übrigen einen Pfad in das Feld, so wird dieses als Startverzeichnis im Auswahldialog genutzt. Der Pfad darf jedoch keine Dateinamen enthalten....
Dafür gibt es in der Bibliothek "Tools" ein paar nette Funktionen - die können dir beim "Abschneiden" helfen ;-)

Gruss
Thomas
Unterstützer LibreOffice, zertifizierter Trainer und Berater
Bücher: LibreOffice 6- Einstieg und Umstieg
Makros Grundlagen - LibreOffice / OpenOffice Basic
erikafuchs
******
Beiträge: 690
Registriert: Di, 13.02.2007 17:38
Wohnort: Büttelborn

Re: Kopieren zwischen 2 Dokumenten

Beitrag von erikafuchs »

Hallo, ich schon wieder,
na ja, man merkt, ich bin halt Anfänger (wie lernt man die Makroprogrammierung eigentlich richtig, ohne immer so blöd dazustehen?). (Ich weiß ja noch nicht mal wie man hier zitiert) "...Datenarray aus Dokument 1 auslesen und in Dokument 2 einfügen. Wo ist das Problem?..." Es ist jetzt so, dass ich den Befehl "dsheet=ThisComponent.sheets.getByName("Daten") " kann, jetzt habe ich aber doch zwei geöffnete Dateien, eie heißt "rechentrainer 0.41" und die andere "rechentrainer 0,39", wie spreche ich die an, wenn ich nur den Befehl "ThisComonent" kenne. Schwierig ist für mich zusätzlich, dass die Nummer "0.41" und "0.39" sich ja wöchentlich ändern und auch die Speicherorte immer anders sind.
Und zum zweiten Tip, ich habe das Dateiauswahlfeld genommen, weil mir nichts besseres eingefallen ist. Wo ist den der genannte "Dateiauswahl-Dialog" und wo ist die "Bibliotek Tools", die du empfiehlst?

PS. Auf der CD zu deinem Buch ist es mir nicht gelungen mir die Eigenschaften des Diaolgs mit dem Fortschrittsbalken anzusehen - bin ich da wieder dusselig oder ist da ein Schutz drin?

Grüße und Dank
Pit
Toxitom
********
Beiträge: 3769
Registriert: Di, 12.08.2003 18:07
Wohnort: Wiesbaden
Kontaktdaten:

Re: Kopieren zwischen 2 Dokumenten

Beitrag von Toxitom »

Hey Pit,

die Bibliothek "Tools" kommt automatisch mit OpenOffice.org und befindet sich im Speicherort "OpenOffice.org Makros. Sie heisst auch "Tools" und ist eigentlich nicht zu verfehlen ;-)

Und nein, die CD meines Buches so wie alle darauf befindlichen Dateine haben keinen Schutz - sollte also gelingen. Welches spezielle Beispiel meist du?
..lernt man die Makroprogrammierung eigentlich richtig, ohne immer so blöd dazustehen...
Na ja, "learning by doing". Beispiele nachprogrammieren und versuchen zu verstehen, warum das eine oder andere so ist. Leicht variieren und so weiter. Und: Du stehst nicht "blöd" da, nur lernt man Makros kaum direkt an einem sehr großen Projekt, wenn man die Grundlagen noch nicht versteht. Dann sind viele Fragen einfach nicht beantwortbar, ohne stundenlange Lektionen zu dozieren. Und das ist natürlich nicht die Aufgabe des Forums - eher konkrete Hilfe bei Fragen.

Z.B. "thisComponent" bezieht sich immer nur auf das aktuelle Dokument, damit kannst du zwar dieses Objekt erhalten - aber nicht das eines zweiten Dokumentes. Dafür gibt es die Methode "LoadComponentFromURL()" - damit erhälst du auch das Objekt des Dokumentes.

Also - vor jeder Programmierung steht eigentlcih ein Plan - meist "händisch" ausgearbeitet, was will man wie und womit erreichen, welche Randbedingunen gibt es und welche Einschränkungen. Erst dann beginnt man zu programmieren.
Wo ist den der genannte "Dateiauswahl-Dialog"
Na, bewundern kannst du den, wenn du "Datei- öffnen" aufrufst. Auch dieser Dialog ist Teil des Programms und du kannst den natürlich auch selbst nutzen. Du findest ihn im Modul com.sun.star.ui.dialogs - dort sind auch die Eigenschaften beschrieben.

Wie schon gesagt: Verliere nicht den Spass an der Programmierung und fange mit kelinen Beispielen an. Hinweise und Beispiel findest du im ersten Thread dieses Forums - und dann - mit Erfolgen - Schritt für schritt weiter :-)

Viele Grüße
Thomas
Unterstützer LibreOffice, zertifizierter Trainer und Berater
Bücher: LibreOffice 6- Einstieg und Umstieg
Makros Grundlagen - LibreOffice / OpenOffice Basic
erikafuchs
******
Beiträge: 690
Registriert: Di, 13.02.2007 17:38
Wohnort: Büttelborn

Re: Kopieren zwischen 2 Dokumenten

Beitrag von erikafuchs »

Lieber Klaus, wieder mal vielen Dank für deine Mühe.
Ich weiß schon ich habe mir viel vorgenommen, aber ein Teil funktioniert ja schon und bis Montag muss das Teil soweit fertig sein, dass ich meinen Schülern schon die erste Version geben kann. Es wäre zwar einfacher kleine Brötchen zu backen aber bei all meinen Computerprojekten war es so, dass ich ein Problem hatte, das alle Programme die ich aufgetrieben habe nicht so gelöst haben, dass ich zufrieden war. Jetzt sehe ich, dass meine Schüler kein Einmaleins können und im Hauptschul- und Realschulabschlusstest können sie keine Einheiten umrechnen, sie können den Umfang nicht von der Fläche des Quadrates unterscheiden und mit dem Rechnen mit Rationalen Zahlen verstehen sie auch nichts. Alle Arbeitsblätter und Bücher befriedigen mich nicht. Mit meinem Programm bekommen sie die Aufgabe, in jeder Woche zB. Hundert Aufgaben zu rechnen. Sie müssen dann das Tabellenblatt ausdrucken und ich kann sehen, welche Aufgaben sie gemacht haben, wie schnell sie waren und wie viele Fehler sie gemacht haben. Die Schüler erhalten zudem noch eine Rückmeldung ob sie besser und schneller geworden sind. Mein Söhne haben es schon probiert und ich erkenne, wie wichtig das ist.Wenn es erstmal ohne viele Fehler läuft, bin ich sicher, dass das Programm auch Verbreitung finden wird. Ich bin sicher das dieses Programm meinen Schülern helfen wird - auch wenn der blöde Fortschrittsbalken noch nicht funktioniert.

Ich habe immer gleich ein größeres Projeklt in Angriff genommen um Programmieren zu lernen. Von Cobol habe ich keine Ahnung mehr aber mit meinen Basic und dBase Projekten war ich ganz zufrieden. Makros in Calc sind für mich viel schwieriger. Es gibt hier wenig Literatur und bei deinem Buch habe ich oft das Gefühl, dass man Makros schon programmieren können muss bevor man alles versteht. Ich hoffe der Knoten platzt bei mir bald. Vielleich kannst du mir bei einigen Fragen zu deinem Buch helfen damit das schneller geht:

Die Tools hatte ich gestern noch gefunden, wenn mir auch noch nicht so klar ist wie man damit arbeitet. Dass man den Dateiauswahl-Dialog in der Menüleiste auch nutzen kann hatte ich mir schon gedacht, ich finde aber den Zugang nicht. Hilf mir doch bitte mal mit einem Tipp zu: "Du findest ihn im Modul com.sun.star.ui.dialogs - dort sind auch die Eigenschaften beschrieben" - du verwendest solche Sätze in deinem Buch öfter und ich habe an mir gezweifelt, weil ich keine Ahnung habe, wo ich dieses Modul finde - Sorry!

Und dann wäre mir sehr geholfen wenn du mir nochmal bei dem Kopierproblem helfen könntest:
Die URL der neuen Datei heißt oDateiURL, die der alten ist in tDateiURL gespeichert (das funktioniert so weit). Wenn du mir jetzt direkt sagen könntest, wie ich jetzt aus der Tabelle "Daten - A1:R10" der alten Version die Werte kopieren kann und in "Daten - A1:R10" der neueren Version einfügen kann, werden möglicherweise in den nächsten Jahren einige Schüler einen besseren Abschluss mache. :D (Das war der erste Smiley, den ich je eingesetzt habe!)

Ach ja, ich habe auch die Sache mit dem Schutz auf deiner Buch CD nochmal probiert: Die Option "Eigenschaften" kann man erst öffnen, wenn man die Datei auf die Festplatte kopiert hat und sie somit nicht mehr schreibgeschützt ist - jetzt weiß ich´s!

Viele Grüße
Pit
Toxitom
********
Beiträge: 3769
Registriert: Di, 12.08.2003 18:07
Wohnort: Wiesbaden
Kontaktdaten:

Re: Kopieren zwischen 2 Dokumenten

Beitrag von Toxitom »

Hey Pit,
...Du findest ihn im Modul com.sun.star.ui.dialogs - dort sind auch die Eigenschaften beschrieben" - du verwendest solche Sätze in deinem Buch öfter und ich habe an mir gezweifelt, weil ich keine Ahnung habe, wo ich dieses Modul finde...
Na ja, das ist einfach das Objektmodell von OOo. Auf der Buch-CD ist die Obejtrefernez (ausgepackt) - und die beginnt mit der Basis "com.sun.star" - dort sind dann alle Mudule aufgeführt, und im Modul UI findest du eben auch das "nested modul" dialogs. Einfach immer nur draufklicken - wird automatisch weitergeleitet.
Und wenn Dir die CD zu umständlich ist, so nimm die Online-Variante (istsowieso aktueller) - also die IDL Doku.
-> Hier ist der Einstieg :-)

Tia, dann kannst du ganz einfach einen solchen Dialog erzeugen und nutzen:

Code: Alles auswählen

...
oDlg = createUnoService("com.sun.star.ui.dialogs.FilePicker")
oDlg.execute()
...
Nur: Der ist jetzt "nackt", ohne die Voreinstellungen etc, also die Eigenschaften solltest du schon setzen. Es ist aber einfach zu kompliziert, hier jetzt alle Details zu dozieren, das würde Seiten füllen, zudem einfach auch das Grundwissen fehlt. Wo anfangen, wo aufhören?
..wie ich jetzt aus der Tabelle "Daten - A1:R10" der alten Version die Werte kopieren kann und in "Daten - A1:R10" der neueren Version einfügen..
Also, ich weigere mich immer etwas, fertige Lösungen komplett hier zu posten. Das ist kein "Dienstleistungsforum". Ich helfe gerne, wenn es "hakt", aber komplette Lösungen...
Wie weit bist du denn? Im Buch findest du auf Seite 390 die Methoden getDataArray() und setDataArray(), mit denen du das sehr einfach realisieren kannst. Das Beispiel dort kannst du ebenfalls recht einfach übertragen.
Also, poste, wie weit du kommst und ich helfe dir die Schwachstellen auszumerzen.
Zum Speichern als PDF lässt du einfach den Makrorekorder mitlaufen - und übernimmst den Code. Das ist der einfachst eund schnellste Weg :-)

Viele Grüße
Thomas
Unterstützer LibreOffice, zertifizierter Trainer und Berater
Bücher: LibreOffice 6- Einstieg und Umstieg
Makros Grundlagen - LibreOffice / OpenOffice Basic
erikafuchs
******
Beiträge: 690
Registriert: Di, 13.02.2007 17:38
Wohnort: Büttelborn

Re: Kopieren zwischen 2 Dokumenten

Beitrag von erikafuchs »

Lieber Thomas,
vielen dank erstmal wieder für deine Mühe.
Also, ich weigere mich immer etwas, fertige Lösungen komplett hier zu posten. Das ist kein "Dienstleistungsforum". Ich helfe gerne, wenn es "hakt", aber komplette Lösungen...
Wie weit bist du denn? Im Buch findest du auf Seite 390 die Methoden getDataArray() und setDataArray(), mit denen du das sehr einfach realisieren kannst. Das Beispiel dort kannst du ebenfalls recht einfach übertragen.
... das mit den fertigen Lösungen ist schon klar, es würde wohl auch gar nicht funktionieren, das mit wenig Aufwand hinzubekommen. Ich hatte meine Programmzeilen zitiert um mein Problem klarzumachen. Dein Beispiel auf Seite 390 hatte ich ja auch gelesen, das hilft mir auch weiter - hier wird aber ein Bereich innerhalb eines Dokuments kopiert. Ich habe bisher aber keine Möglichkeit gefunden, wie ich zwischen zwei Dokumenten mit gleicher Struktur kopieren kann. Da ich bisher nur den Ausdruck "ThisDocument" beherrsche, brauche ich hauptsächlich den Rat wie ich die beide (geöffneten) Dokumente jeweils anspreche.
Auf der Buch-CD ist die Obejtrefernez (ausgepackt) - und die beginnt mit der Basis "com.sun.star" - dort sind dann alle Mudule aufgeführt, und im Modul UI findest du eben auch das "nested modul" dialogs. Einfach immer nur draufklicken - wird automatisch weitergeleitet.
Und wenn Dir die CD zu umständlich ist, so nimm die Online-Variante (istsowieso aktueller) - also die IDL Doku.
-> Hier ist der Einstieg :-)
Ich habe die Objektreferenz leider nicht gefunden. In der "Liesmich.txt" Datei auf der CD steht:
" Im Ordner "sdk" finden Sie die gepackten Archive für das aktuelle SDK 2.0 für Window und Linux. Zusätzlich ist die API-Referenz bereits ausgepackt verfügbar und direkt von CD aufrufbar. Im Unterordner /SDK/API-Referenz_lokal/ rufen Sie einfach die Datei "module-ix.html" auf, dies ist die Startseite und der Ausgangspunkt zur API-Referenz."

Im Ordner "sdk" ist bei mir aber nur der Linux Ordner mit der Linuxversion und woanders finde ich die Referenz auch nicht. Und auf der oO Seite kommt man heute nicht so recht weiter, hier muss man sehr lange warten hier scheint der Server überlastet zu sein.

Viele Grüße
Pit
Toxitom
********
Beiträge: 3769
Registriert: Di, 12.08.2003 18:07
Wohnort: Wiesbaden
Kontaktdaten:

Re: Kopieren zwischen 2 Dokumenten

Beitrag von Toxitom »

Hey Pit,

also, dann mal die Sache mit den zwei Documenten. Das ist ganz einfach. In dem Moment, wo du programmierst, brauchst du das Objekt des Dokumentes in einer Variablen, du brauchst also zwei Varaible für zwei Dokumente. Der einfachste weg ist der folgende:

Code: Alles auswählen

dim oDok1 as object, oDok2 as object
oDok1 = thisComponent  'das aktuell geöffnete Dokument - aus dem der Code gestartet wird
oDok2 = starDesktop.loadComponentfromURL(...)  'das zweite Dokument
Das zweite Dokument lädst du zum Beispiel "hidden" (findest du alles im Buch beschrieben) - so, jetzt hast du deine zwei Dokumente.
Dann wählst du das entsprechende sheet, und den Tabellenbereich und lädst den Datenarray. Den wiederum kopierst du dann in das andere Dokument.

Code: Alles auswählen

...
dim aDatArray()
aDatArray = oDok1.sheets.getByName("meinTabellenblattXXX").getCellRangeByxName("A1:R10").getDataArray
REM und kopieren in das zweite Dokument:
oDok2.sheets.getByName("meinTabellenblattXXX").getCellRangeByxName("A1:R10").setDataArray(aDatArray)
REM 2. Dokument speichern und schliessen:
oDok2.store()
oDok2.close(true)
...
Alles kein Geheimnis, nichts wirklich kompliziertes, alles im Buch beschrieben. Aber Achtung; Auch die Codezeilen sind nur ein Muster - anpassen und verfeinern musst du es schon.
...Im Ordner "sdk" ist bei mir aber nur der Linux Ordner mit der Linuxversion und woanders finde ich die Referenz auch nicht....
Hmm, habe gerade jetzt mal eine Buch-CD eingelegt. Alles so, wie es sein soll: Im Ordner "SDK" gibt es den Unterordner "API-Referenz_lokal" und dort ist alles drin. Auch die angesprochene Startseite. Keine Ahnung, was du für ein Buch hast und welche CD du meinst. Im Ordner "SDK" sollte auch kein Linuxordner sein!

Viele Grüße
thomas
Unterstützer LibreOffice, zertifizierter Trainer und Berater
Bücher: LibreOffice 6- Einstieg und Umstieg
Makros Grundlagen - LibreOffice / OpenOffice Basic
erikafuchs
******
Beiträge: 690
Registriert: Di, 13.02.2007 17:38
Wohnort: Büttelborn

Re: Kopieren zwischen 2 Dokumenten

Beitrag von erikafuchs »

Lieber Thomas,
toll, das sollte ich hinbekommen - vielen Dank.

Zur Buch CD habe ich jetzt mal ein Screenshot als Dateianhang beigelegt. Aber bei mir im SDK Ordner ist der Linux Ordner mit einer Datei. Ich habe die 1. Auflage 1. korrigierter Nachdruck deines Buches von 2006 mit der Original CD.
Grüße
Pit
Dateianhänge
CD Ordner.jpg
CD Ordner.jpg (33.94 KiB) 1993 mal betrachtet
Toxitom
********
Beiträge: 3769
Registriert: Di, 12.08.2003 18:07
Wohnort: Wiesbaden
Kontaktdaten:

Re: Kopieren zwischen 2 Dokumenten

Beitrag von Toxitom »

Hey Pit,
...habe die 1. Auflage 1. korrigierter Nachdruck...
Interessant. Da hat der Verlag beim ersten Nachdruck wohl etwas "Mist" gebaut. Die CD liegt mir leider nicht vor - nur die Orginal CD (der Erstauflage). Und da ist noch alles Korrekt. Auf der Nachdruck-CD sollte auch keine 1.9.113 mehr drauf sein - da gab es schliesslich die 2.X Version schon...
Tia, tut mir leid, da hat der Verlag wohl etwas falsch gemacht.

Viele Grüße
Thomas
Unterstützer LibreOffice, zertifizierter Trainer und Berater
Bücher: LibreOffice 6- Einstieg und Umstieg
Makros Grundlagen - LibreOffice / OpenOffice Basic
Antworten