Inhalte einfügen

Antwort erstellen


BBCode ist eingeschaltet
[img] ist ausgeschaltet
[url] ist eingeschaltet
Smileys sind ausgeschaltet

Die letzten Beiträge des Themas
   

Ansicht erweitern Die letzten Beiträge des Themas: Inhalte einfügen

von Charly » So, 11.12.2005 12:13

Hallo!

Zu dem Thema Kopieren - Werte ohne Formel einfügen habe ich jetzt eine native Basic-Lösung gefunden. Meine Lösung hat allerdings den Nachteil, dass der Zielbereich genauso groß sein muss wie der Quellbereich. Die Angabe der ersten Zelle im Zielbereich genügt also nicht. Mein Code ist dafür aber wesentlich überschaubarer als der mit dem Makrorekorder.

Code: Alles auswählen

sub EinfuegenDaten()

	Doc = Thiscomponent
	Tab = Doc.Sheets(1)
	Quelle = Tab.getCellRangeByName("A1:B19")
	
	Ziel = Tab.getCellRangeByName("C1:D19")
	
	Daten = Quelle.DataArray
	Ziel.DataArray = Daten
end sub	


Gruß
Charly

von Charly » Sa, 24.07.2004 20:21

Hallo Toxitom!

Das mit dem Auslesen der Zelle ist mir bekannt. Diese Methode kann jedoch sehr aufwendig werden, wenn ich ganze Bereich kopieren will. Ich habe auch eine Lösung mit Hilfe des Makrorekorders gefunden. Nur benötigt diese Lösung eine Menge Programmzeilen und schaut nicht so elegant aus wie die Lösung von Microsoft. Einigermaßen hinnehmbar ist die Lösung nur dadurch, dass ich alles in ein Unterprogramm gepackt habe, dass ich dann einfach aufrufen muss.

Für alle Interressierten hier meine Lösung:

Code: Alles auswählen

Sub Kopieren
oDoc = ThisComponent
oTab = oDoc.sheets(0)
oQuelle = oTab.getCellRangebyName("A1:A9")
oZiel =  oTab.getCellRangebyName("C1")
kopiereInWerte(oQuelle, oZiel)
End Sub

sub kopiereInWerte (o1Quelle, o1Ziel)

dim Controller as object
dim document   as object
dim dispatcher as object

Controller = ThisComponent.CurrentController
document   = Controller.Frame
dispatcher = createUnoService("com.sun.star.frame.DispatchHelper")

Controller.select(o1Quelle) 

dispatcher.executeDispatch(document, ".uno:Copy", "", 0, Array())

rem ----------------------------------------------------------------------

Controller.select(o1Ziel)

dim args5(5) as new com.sun.star.beans.PropertyValue
args5(0).Name = "Flags"
args5(0).Value = "SVDNT"
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
Gruß

Charly

von Toxitom » Sa, 24.07.2004 10:51

Hey @ all,
nicht geprüft, aber ich denke, da gibt es eine Lösung.
jede Zelle hat drei Eigenschaften (Text, value, formual) welche relativ unabhängig voneinander existieren können.
Man kann jede Zelle (Eigenschaft) auslesen und woanders einfügen.

Wenn man also die Inhalte (Werte) haben möchte, so liest man eben die "values" aus, das sind dann die Ergebnisse der Formeln. Und die kann ich woanders wieder einfügen.

Gruss
Thomas

Inhalte einfügen

von Charly » So, 04.07.2004 12:09

Hallo!

Ich möchte gern in einem Calc-Dokument per Makro einen Bereich kopieren und diesen an einer anderen Stelle einfügen. Da der kopierte Bereich Formel und Bezüge enthält, sollen im Zielgebiet nur die Werte ankommen.

Ich kenne zwar den Kopierbehl:

Code: Alles auswählen

oBlatt.copyrange(Zielbereich, Quellbereich). 
Diesen Befehl kann ich jedoch nicht "Auf Werte einfügen" einschränken.

In Excel gibt es den Befehl

Code: Alles auswählen

Selection.copy
Selection.PasteSpecial Paste:=xlValues 
Gibt es so etwas auch im OpenOffice. Die Befehle, die der Makrorekorder liefert, erscheinen mir etwas umständlich und es erfordert auch einen großen Aufwand, sie für alle Gelegenheiten anzupassen.

Gruß
Charly

Nach oben