Seite 1 von 1

Calc: Bereich in andere Datei kopieren

Verfasst: Mi, 02.03.2011 20:41
von Walter43
Ein Hallo an die OOo Fans.
Habe ein Problem mit der Aufzeichnung eines Makros mittels Recorder. Der Recorder zeichnet nur die Schritte der aktiven Datei auf.
Wer kann mir helfen?
Der Vorgang sollte wie folgt ablaufen:
In Quelldatei ("DP1") Breich kopieren
In Zieldatei ("DP2") Bereich einfügen. ( Zahlen; Text; Datum und Format)
Danke im Voraus.

mfg Walter



Moderation,4: in BASIC-Unterforum verschoben; Titel geändert

Re: Calc: Bereich in andere Datei kopieren

Verfasst: Mi, 02.03.2011 20:56
von komma4
Naja... wenn der Inhalt in der Zwischenablage ist, kann er -auch mit einem dispatcher-Befehl- eingefügt werden.

Code: Alles auswählen

dispatcher.executeDispatch(document, ".uno:Paste", "", 0, Array())
(die Variable document muss natürlich auf das Zieldokument gesetzt werden und der Cursor muss positioniert sein)


Vielleicht kommt Walter ja damit weiter.


Ansonsten gibt es hier im Forum schon mehrere Threads, die sich mit exakt der gleichen Fragestellung beschäftigten - und die Aufgabe mit StarBasic lösten.

Re: Calc: Bereich in andere Datei kopieren

Verfasst: Mi, 02.03.2011 21:05
von Walter43
Innerhalb der gleichen Datei mit mehren Tabellen habe ich gut aufzeichnen können. Leider wird die ganze Geschichte mit jedem Makro immer langsamer (bis zu
10 Minuten für einen Ausdruck). Deshalb möchte ich für den Ausdruck alle Daten reinholen.

mfg Walter

Re: Calc: Bereich in andere Datei kopieren

Verfasst: Do, 03.03.2011 13:01
von Walter43
komma4 hat geschrieben:Naja... wenn der Inhalt in der Zwischenablage ist, kann er -auch mit einem dispatcher-Befehl- eingefügt werden.

Code: Alles auswählen

dispatcher.executeDispatch(document, ".uno:Paste", "", 0, Array())
(die Variable document muss natürlich auf das Zieldokument gesetzt werden und der Cursor muss positioniert sein)


Vielleicht kommt Walter ja damit weiter.


Ansonsten gibt es hier im Forum schon mehrere Threads, die sich mit exakt der gleichen Fragestellung beschäftigten - und die Aufgabe mit StarBasic lösten.
Hallo "komma4",
danke für deinen Hinweis. Bin einige Stunden am experimentieren und stöbern, komme aber trotztem nicht weiter.
Kannst du mir drüberhelfen? Mein Code schaut so aus:

Code: Alles auswählen

sub kopi1
dim document   as object
dim dispatcher as object
document   = ThisComponent.CurrentController.Frame
dispatcher = createUnoService("com.sun.star.frame.DispatchHelper")

dim args1(0) as new com.sun.star.beans.PropertyValue
args1(0).Name = "ToPoint"
args1(0).Value = "$AA$4:$AB$33"
dispatcher.executeDispatch(document, ".uno:GoToCell", "", 0, args1())
dispatcher.executeDispatch(document, ".uno:Copy", "", 0, Array())


rem Hier ist meine grosse Hürde!!!!
rem Hier ist meine grosse Hürde!!!!
rem Wie komme ich zur Zieldatei???
rem Habe meine Dateien "Quelldatei" und "Zieldatei" getauft

document   = ThisComponent.CurrentController.Frame
dispatcher = createUnoService("com.sun.star.frame.DispatchHelper")
dim args4(0) as new com.sun.star.beans.PropertyValue
args4(0).Name = "ToPoint"
args4(0).Value = "$K$3"
dispatcher.executeDispatch(document, ".uno:GoToCell", "", 0, args4())

dim args5(5) as new com.sun.star.beans.PropertyValue
args5(0).Name = "Flags"
args5(0).Value = "SVDT"
args5(1).Name = "FormulaCommand"
args5(1).Value = 0
args5(2).Name = "SkipEmptyCells"
args5(2).Value = false
args5(3).Name = "Transpose"
args5(3).Value = false
args5(4).Name = "AsLink"
args5(4).Value = false
args5(5).Name = "MoveMode"
args5(5).Value = 4

dispatcher.executeDispatch(document, ".uno:InsertContents", "", 0, args5())
end sub
Währ echt toll wenn du mir drüberhilfst.

mfg Walter

Re: Calc: Bereich in andere Datei kopieren

Verfasst: Sa, 05.03.2011 04:07
von komma4
Die Variable document bezieht sich auf den Anwendungsrahmen des Dokuments.

Deshalb musst Du sie zweimal haben (Quelle/Ziel).

Um sie im Code zu bestimmen, habe ich im folgenden Beispiel beide Dateien mit Code geöffnet.

Code: Alles auswählen

sub de47205
' 2011-03-05 
' OOo 3.2.1 / openSuse 11.1


sZiel = "/zentrale/Documents/daten/testdata/ziel.ods"
URLZiel = ConvertToURL( sZiel )

oZiel = StarDesktop.loadComponentFromURL( URLZiel,"_blank", 0, Array() )

oZielFrame = oZiel.CurrentController.Frame



sQuelle = "/zentrale/Documents/daten/testdata/quelle.ods"
URLQuelle = ConvertToURL( sQuelle )

oQuelle = StarDesktop.loadComponentFromURL( URLQuelle,"_blank", 0, Array() )

oQuelleFrame = oQuelle.CurrentController.Frame



dim dispatcher as object
dispatcher = createUnoService("com.sun.star.frame.DispatchHelper")


dim args1(0) as new com.sun.star.beans.PropertyValue
args1(0).Name = "ToPoint"
args1(0).Value = "$AA$4:$AB$33"
dispatcher.executeDispatch(oQuelleFrame, ".uno:GoToCell", "", 0, args1())
dispatcher.executeDispatch(oQuelleFrame, ".uno:Copy", "", 0, Array())



dim args4(0) as new com.sun.star.beans.PropertyValue
args4(0).Name = "ToPoint"
args4(0).Value = "$K$3"
dispatcher.executeDispatch(oZielFrame, ".uno:GoToCell", "", 0, args4())

dim args5(5) as new com.sun.star.beans.PropertyValue
args5(0).Name = "Flags"
args5(0).Value = "SVDT"
args5(1).Name = "FormulaCommand"
args5(1).Value = 0
args5(2).Name = "SkipEmptyCells"
args5(2).Value = false
args5(3).Name = "Transpose"
args5(3).Value = false
args5(4).Name = "AsLink"
args5(4).Value = false
args5(5).Name = "MoveMode"
args5(5).Value = 4

dispatcher.executeDispatch(oZielFrame, ".uno:InsertContents", "", 0, args5())
end sub


Du kommst damit zurecht?

Re: Calc: Bereich in andere Datei kopieren

Verfasst: Sa, 05.03.2011 13:48
von Walter43
Hallo Winfried,
vorerst danke für deine Antwort.
Leider komme ich noch nicht klar. Habe die Dateien in "Quelle" und "Ziel" umgeschrieben und die Adressen berichtigt. Doch ohne Erfolg.
Zum Verständnis hänge ich den Code nochmals an und bitte dich mir zu schreiben wo ich Fehler gemacht habe.

Code: Alles auswählen

sub de47205
' 2011-03-05 
' OOo 3.2.1 / openSuse 11.1
sZiel = "/zentrale/Documents/daten/testdata/ziel.ods"
URLZiel = ConvertToURL( sZiel )

oZiel = StarDesktop.loadComponentFromURL( URLZiel,"_blank", 0, Array() )

oZielFrame = oZiel.CurrentController.Frame

sQuelle = "/zentrale/Documents/daten/testdata/quelle.ods"
URLQuelle = ConvertToURL( sQuelle )

oQuelle = StarDesktop.loadComponentFromURL( URLQuelle,"_blank", 0, Array() )

oQuelleFrame = oQuelle.CurrentController.Frame

dim dispatcher as object
dispatcher = createUnoService("com.sun.star.frame.DispatchHelper")

dim args1(0) as new com.sun.star.beans.PropertyValue
args1(0).Name = "ToPoint"
args1(0).Value = "$a$100:$Z$140"
dispatcher.executeDispatch(oQuelleFrame, ".uno:GoToCell", "", 0, args1())
dispatcher.executeDispatch(oQuelleFrame, ".uno:Copy", "", 0, Array())

'Muss ich nicht hier noch was reinschreiben?

dim args4(0) as new com.sun.star.beans.PropertyValue
args4(0).Name = "ToPoint"
args4(0).Value = "$a$150"
dispatcher.executeDispatch(oZielFrame, ".uno:GoToCell", "", 0, args4())

dim args5(5) as new com.sun.star.beans.PropertyValue
args5(0).Name = "Flags"
args5(0).Value = "SVDT"
args5(1).Name = "FormulaCommand"
args5(1).Value = 0
args5(2).Name = "SkipEmptyCells"
args5(2).Value = false
args5(3).Name = "Transpose"
args5(3).Value = false
args5(4).Name = "AsLink"
args5(4).Value = false
args5(5).Name = "MoveMode"
args5(5).Value = 4

dispatcher.executeDispatch(oZielFrame, ".uno:InsertContents", "", 0, args5())
end sub
Vielen Dank mfg Walter

Re: Calc: Bereich in andere Datei kopieren

Verfasst: Sa, 05.03.2011 16:01
von komma4
Walter43 hat geschrieben: Habe die Dateien in "Quelle" und "Ziel" umgeschrieben und die Adressen berichtigt. Doch ohne Erfolg.
Walter: ich sehe nicht, dass Du die "Adressen" (nehme an: die Dateinamen) korrigiert hast.

Re: Calc: Bereich in andere Datei kopieren

Verfasst: Sa, 05.03.2011 17:51
von Walter43
Hallo Winfried,
stimmt habe jetzt aber doch die Adressen geändert.
Das Makro bleibt aber an dieser Stelle hängen.

Code: Alles auswählen

oZiel = StarDesktop.loadComponentFromURL( URLZiel,"_blank", 0, Array() )
Die Fehlermeldung lautet: Basic Laufzeitfehler
Es ist eine Exzeption aufgetreten.
Type: com.sun.star.lang.illegalArgumentExzeption
Message: URL seems to bean insupported one

Damit bin ich überfordert.
Kannst du mir sagen was ich umschreiben muss? Danke für deine Bereitchaft.
mfg Walter

apple leopart, OOo 3.2

Re: Calc: Bereich in andere Datei kopieren

Verfasst: Sa, 05.03.2011 18:30
von Walter43
Hallo Winfried,
zum besseren Verständnis sende ich besser den ganzen Code.
mfg Walter

Code: Alles auswählen

sub de47205
' 2011-03-05 
' OOo 3.2.1 / openSuse 11.1
sZiel = "/Users/walteroswald/Documents/ziel.ods"
URLZiel = ConvertToURL( sZiel )

oZiel = StarDesktop.loadComponentFromURL( URLZiel,"_blank", 0, Array() )

oZielFrame = oZiel.CurrentController.Frame

sQuelle = "/Users/walteroswald/Documents/quelle.ods"
URLQuelle = ConvertToURL( sQuelle )

oQuelle = StarDesktop.loadComponentFromURL( URLQuelle,"_blank", 0, Array() )

oQuelleFrame = oQuelle.CurrentController.Frame

dim dispatcher as object
dispatcher = createUnoService("com.sun.star.frame.DispatchHelper")

dim args1(0) as new com.sun.star.beans.PropertyValue
args1(0).Name = "ToPoint"
args1(0).Value = "$a$100:$Z$140"
dispatcher.executeDispatch(oQuelleFrame, ".uno:GoToCell", "", 0, args1())
dispatcher.executeDispatch(oQuelleFrame, ".uno:Copy", "", 0, Array())

'Muss ich nicht hier noch was reinschreiben?

dim args4(0) as new com.sun.star.beans.PropertyValue
args4(0).Name = "ToPoint"
args4(0).Value = "$a$150"
dispatcher.executeDispatch(oZielFrame, ".uno:GoToCell", "", 0, args4())

dim args5(5) as new com.sun.star.beans.PropertyValue
args5(0).Name = "Flags"
args5(0).Value = "SVDT"
args5(1).Name = "FormulaCommand"
args5(1).Value = 0
args5(2).Name = "SkipEmptyCells"
args5(2).Value = false
args5(3).Name = "Transpose"
args5(3).Value = false
args5(4).Name = "AsLink"
args5(4).Value = false
args5(5).Name = "MoveMode"
args5(5).Value = 4

dispatcher.executeDispatch(oZielFrame, ".uno:InsertContents", "", 0, args5())
end sub

Re: Calc: Bereich in andere Datei kopieren

Verfasst: Sa, 05.03.2011 18:37
von komma4
Walter: Du hast ein UNIX-System?


Unter Windows muss sZiel den vollständigen Pfad inkl. Laufwerksbuchstaben haben, bspw.: d:\Users\walteroswald\Documents\ziel.ods

Re: Calc: Bereich in andere Datei kopieren

Verfasst: Sa, 05.03.2011 18:40
von Walter43
Hallo,
ich habe Mac Leopard. Danke
mfg Walter

Re: Calc: Bereich in andere Datei kopieren

Verfasst: Mo, 07.03.2011 19:49
von Walter43
Hallo foobar^,

danke für deinen Hinweis. Ich denke das ist genau das was ich brauche.

mfg Walter