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