[gelöst] Werte ohne Formel & ohne Zwischenablage kopieren

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

Moderator: Moderatoren

nicrnicr
*
Beiträge: 14
Registriert: Mo, 15.03.2021 19:03

[gelöst] Werte ohne Formel & ohne Zwischenablage kopieren

Beitrag von nicrnicr »

Hallo Allerseits,

habe gerade erfahren, wie man Bereiche kopiert. Ich möchte aber nur Werte ohne Formel kopieren, und zwar ohne die Zwischenablage zu verwenden, denn sie ist nicht 100% sicher.
Habe gefunden, dass es mit sowas wie

Code: Alles auswählen

oSheet0.getCellRangeByName("B14").Value = oSheet6.getCellRangeByName("C3:C4").Value
einfach wäre. Doch ich schaffe es nicht sowas in den folgenden Sub zu stellen:

Code: Alles auswählen

Sub Main
 Dim oUeb as Object  					'Die übertragbaren Daten
 Dim oSheet0 as Object, oSheet6 as Object 	'Tabellenblatt
 Dim oRange  as Object					'Zellbereich
 Dim OBuchhaltung  as Object				'Dokument

	OBuchhaltung=ThisComponent

		oSheet6=OBuchhaltung.getSheets().getByIndex(6)

		 oRange = oSheet6.getCellRangeByName("C3:C4")

			OBuchhaltung.CurrentController.select(oRange)
				oUeb = OBuchhaltung.CurrentController.getTransferable()

	oSheet0=OBuchhaltung.getSheets().getByIndex(0)
		
 	oRange = oSheet0.getCellRangeByName("B14")
		OBuchhaltung.CurrentController.select(oRange)
			OBuchhaltung.CurrentController.insertTransferable(oUeb)

End Sub
Wisst Ihr bitte, wie es gehen würde?
Zuletzt geändert von nicrnicr am Di, 16.03.2021 16:23, insgesamt 1-mal geändert.
Stephan
********
Beiträge: 12369
Registriert: Mi, 30.06.2004 19:36
Wohnort: nahe Berlin

Re: Werte ohne Formel & ohne Zwischenablage kopieren

Beitrag von Stephan »

es gibt kein .Value bei mehrzellingem Range.

Es geht von Zelle in Zelle, z.B.:

Code: Alles auswählen

ThisComponent.Sheets.getByIndex(0).GetCellRangeByName("A1").Value = ThisComponent.Sheets.getByIndex(6).GetCellRangeByName("B14").Value
von Zelle in mehrere Zellen, per Schleife:

Code: Alles auswählen

'für Zellen A1:B10
For i = 0 To 1
	For j = 0 To 9
		ThisComponent.Sheets.getByIndex(0).getCellByPosition(i,j).Value = ThisComponent.Sheets.getByIndex(6).GetCellRangeByName("B14").Value
	Next j
Next i
Dieses Arbeitem im Tabellenblatt per Schleife ist aber langsam, man macht das besser indem man sich Arrays zusammenbaut (per SChleife) und dann mit .setDataArray ins Blatt schreibt (ohne Beispiel, weil ich keine Zeit habe)

als Array lesen und schreiben, hierbei müssen beide Ranges gleich groß sein:

Code: Alles auswählen

x = ThisComponent.Sheets.getByIndex(6).GetCellRangeByName("B1:C10").getDataArray()
ThisComponent.Sheets.getByIndex(0).GetCellRangeByName("A1:B10").setDataArray(x)

Gruß
Stephan
nicrnicr
*
Beiträge: 14
Registriert: Mo, 15.03.2021 19:03

Re: Werte ohne Formel & ohne Zwischenablage kopieren

Beitrag von nicrnicr »

Hallo Stephan!

Danke danke sehr!
Ich muss nicht ganze Bereiche kopieren. Von Zelle in Zelle ggf. mit Schleife und mit Arrays passt es mir!

Danke nochmals! :-)
Antworten