You are viewing a plain text version of this content. The canonical link for it is here.
Posted to users-de@openoffice.apache.org by technik <te...@selbstlesebuch.jrsch.de> on 2014/05/02 09:09:10 UTC

Zugriff auf ein anderes Dokument über Makro

Hallo,

ich kann mir nicht vorstellen, dass andere nicht andere bereits vor 
einem ähnlichen Problem gestanden haben, aber entweder ist es so 
trivial, dass es keiner veröffentlicht hat oder ich suche falsch.

Ich möchte zwischen zwei Calc Dateien Werte austauschen.
Ich habe Datei1.odt die ist offen
oDoc = ThisComponent
odocument = ThisComponent.CurrentController.Frame

und ich kann Datei1.odt öffnen von der URL
oDoc2=StarDesktop.loadComponentFromURL(sUrl,"_blank",0,Array())
odocument2= oDoc2.CurrentController.Frame

Wenn dieses Dokument aber bereits offen ist, dann gibt es Probleme beim 
Eintragen.
Außerdem klappt das mit dem Zugriff auf die anderen Dokumente nicht so 
wie iches will. Ich kann da nichts eintragen liegt vielleicht am 
CurrentController.

Da ich ein Guttenberg-Programmierer bin, verstehe ich nicht so richtig 
alle Hintergründe. :-[

Ich wäre dankbar, wenn mir da jemand weiterhelfen könnte.

Also, wie kann ich zwei oder mehrere Dateien in einem Makro ansprechen?

Horst

---------------------------------------------------------------------
To unsubscribe, e-mail: users-de-unsubscribe@openoffice.apache.org
For additional commands, e-mail: users-de-help@openoffice.apache.org


RE: Zugriff auf ein anderes Dokument über Makro

Posted by Jan-Christian Wienandt <ja...@wienandt.de>.
Moin Horst,

ein kleiner Nachtrag zu meiner Mail von vorhin.
Hier findest Du etwas zum Lesen, sehr hilfreich zum Verständnis der
Makroprogrammierung.

http://www.prooo-box.org/live/dokumentation/makro/OOME_3_0_deutsch.pdf

Noch ein Tipp, unter

 http://www.medimops.de/Buecher/

werden u.a. gebrauchte Bücher über OpenOffice angeboten.
Dort findest Du mit Chance auch das Buch von Thomas Krumbein:

Makros in OpenOffice.org 3.

Kann ich nur empfehlen.


Gruß
Jan



---------------------------------------------------------------------
To unsubscribe, e-mail: users-de-unsubscribe@openoffice.apache.org
For additional commands, e-mail: users-de-help@openoffice.apache.org


RE: Zugriff auf ein anderes Dokument über Makro

Posted by Jan-Christian Wienandt <ja...@wienandt.de>.
Moin Horst,

> Ich möchte zwischen zwei Calc Dateien Werte austauschen.

Eine Frage zu Deinem Problem, soll die Datei2 nach dem Eintrag der neuen
Daten geschlossen werden?
Ich habe ein Beispiel, wie Daten aus einer Datenbank  in ein Calc-Dokument
exportiert werden.
Die Daten werden in den Arrays "spalte" und "daten" ausgelesen.
Allerdings wird das Dokument nach dem Export geschlossen.

Hier das Beispiel:

'-----------------
Sub export

'Variable für die Hinweisbox
 Dim hinweis As string
  Dim i As Integer

'Zunächst die Variablen zur Erzeugung des Dokumentes
 Dim Pfad As String
  Dim titel As String
   Dim dateiname As String
    Dim url As String

'Variablen für das eigentliche Calc-Dokument     
 Dim dokument As Object
  Dim tabelle As Object
   Dim args(0) As New com.sun.star.beans.PropertyValue
    Dim zelle As Object
   
'Einstellen der Variablen für das Calc-Dokument
 titel ="Datenexport vom " & Date()
  dateiname = "Datenexport.ods"   '"Datenexport vom " & Date() & ".ods"
   pfad = "C:"
    url = ConvertToUrl(pfad & "/" & dateiname)

 args(0).Name = "Overwrite"
  args(0).Value = True

'Einstellen der Variablen für das Hinweisfenster
 hinweis = "Die Datei mit der Bezeichnung" & chr(13) & _
            dateiname & chr(13) & _
           "ist bereits vorhanden!" & chr(13) & _
           "        Überschreiben?      "          

'Jetzt prüfe ich, ob es bereits eine Datei mit dem Namen gibt.
 If FileExists(url) then
   i = msgbox( hinweis , 52,"Datensatzexport")
 
    If i <> 6 then
     Exit Sub
    End if   
   
 End if 

'Jetzt wird das eigentliche Calc-Dokument erzeugt    
 dokument =
starDesktop.loadComponentFromURL("private:factory/scalc","_blank",0,
Array())
  tabelle = dokument.Sheets(0)
  
'Füllen der Spaltenüberschriften
'Zunächst Rücksetzen der Zählvariable i
 i = 0
   
   Do while i <= 6
    zelle = tabelle.getCellByPosition(i, 0)
     zelle.String = spalte(i +1)
      i = i +1
   loop 

'Füllen der Datenfelder
'Zunächst Rücksetzen der Zählvariable i
 i = 0

 Do while i <= 6
    zelle = tabelle.getCellByPosition(i, 1)
     zelle.String = daten(i +1)
      i = i +1
   loop 

'Speichern und schliessen des Dokumentes  
 dokument.storeAsURL(url,args)
  dokument.close(False)

End Sub

'---------------

Gruß
Jan



---------------------------------------------------------------------
To unsubscribe, e-mail: users-de-unsubscribe@openoffice.apache.org
For additional commands, e-mail: users-de-help@openoffice.apache.org


Re: Zugriff auf ein anderes Dokument über Makro

Posted by Regina Henschel <rb...@t-online.de>.
Hallo Horst,

es ist nicht Components sondern Frames. Also
dim oDocuments as variant
oDocuments = StarDesktop.Frames

Das ist dann ein Array und ein einzelnes bekommst du dann z.B. mit 
oDocuments(1). Die Liste musst du dann durchgehen, bis du das gesuchte 
Dokument gefunden hast.

Mit freundlichen Grüßen
Regina


---------------------------------------------------------------------
To unsubscribe, e-mail: users-de-unsubscribe@openoffice.apache.org
For additional commands, e-mail: users-de-help@openoffice.apache.org


Re: Zugriff auf ein anderes Dokument über Makro

Posted by Regina Henschel <rb...@t-online.de>.
Hallo Horst,

technik schrieb:
> Hallo,
>
> ich kann mir nicht vorstellen, dass andere nicht andere bereits vor
> einem ähnlichen Problem gestanden haben, aber entweder ist es so
> trivial, dass es keiner veröffentlicht hat oder ich suche falsch.
>
> Ich möchte zwischen zwei Calc Dateien Werte austauschen.
> Ich habe Datei1.odt die ist offen
> oDoc = ThisComponent
> odocument = ThisComponent.CurrentController.Frame
>
> und ich kann Datei1.odt öffnen von der URL
> oDoc2=StarDesktop.loadComponentFromURL(sUrl,"_blank",0,Array())
> odocument2= oDoc2.CurrentController.Frame
>
> Wenn dieses Dokument aber bereits offen ist, dann gibt es Probleme beim
> Eintragen.
> Außerdem klappt das mit dem Zugriff auf die anderen Dokumente nicht so
> wie iches will. Ich kann da nichts eintragen liegt vielleicht am
> CurrentController.
>
> Da ich ein Guttenberg-Programmierer bin, verstehe ich nicht so richtig
> alle Hintergründe. :-[
>
> Ich wäre dankbar, wenn mir da jemand weiterhelfen könnte.
>
> Also, wie kann ich zwei oder mehrere Dateien in einem Makro ansprechen?

Ich habe es noch nicht ausprobiert, aber von der Struktur her findest du 
es unter 
http://www.openoffice.org/api/docs/common/ref/com/sun/star/frame/Desktop.html

Es gibt eine vordefinierte globale Variable StarDesktop über die du die 
Dokumente erreichen kannst. getComponents() sollte dir eine Liste aller 
offenen Fenster liefern.

Guck mal auf 
https://wiki.openoffice.org/wiki/Documentation/DevGuide/OfficeDev/Using_the_Desktop. 
Da ist ein gelber Tipp-Kasten mit einer Beschreibung.

Vielleicht helfen die Stichworte StarDesktop und getComponents ja auch 
bei einer Suche.

Mit freundlichen Grüßen
Regina


---------------------------------------------------------------------
To unsubscribe, e-mail: users-de-unsubscribe@openoffice.apache.org
For additional commands, e-mail: users-de-help@openoffice.apache.org


Re: Zugriff auf ein anderes Dokument über Makro

Posted by Isch <ch...@web.de>.
Hallo Horst,

ich habe es folgender Maßen gelöst.

Über Makro erst mal nachgeschaut ob die Datei schon offen ist.
Wenn Ja: Datei geschlossen  mit Abspeichern.

Dann konnte ich mein Programm an sich so lassen wie es ist.

Ich habe keine Lösung gefunden es anders zu machen.

Gruß
Christian

Am 02.05.2014 09:09, schrieb technik:
> Hallo,
>
> ich kann mir nicht vorstellen, dass andere nicht andere bereits vor 
> einem ähnlichen Problem gestanden haben, aber entweder ist es so 
> trivial, dass es keiner veröffentlicht hat oder ich suche falsch.
>
> Ich möchte zwischen zwei Calc Dateien Werte austauschen.
> Ich habe Datei1.odt die ist offen
> oDoc = ThisComponent
> odocument = ThisComponent.CurrentController.Frame
>
> und ich kann Datei1.odt öffnen von der URL
> oDoc2=StarDesktop.loadComponentFromURL(sUrl,"_blank",0,Array())
> odocument2= oDoc2.CurrentController.Frame
>
> Wenn dieses Dokument aber bereits offen ist, dann gibt es Probleme 
> beim Eintragen.
> Außerdem klappt das mit dem Zugriff auf die anderen Dokumente nicht so 
> wie iches will. Ich kann da nichts eintragen liegt vielleicht am 
> CurrentController.
> ...

---------------------------------------------------------------------
To unsubscribe, e-mail: users-de-unsubscribe@openoffice.apache.org
For additional commands, e-mail: users-de-help@openoffice.apache.org