Calc: Angewendete Zell-Formatvorlage tauschen

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

Moderator: Moderatoren

Benutzeravatar
balu
********
Beiträge: 3812
Registriert: Fr, 24.08.2007 00:28
Wohnort: Warstein

Calc: Angewendete Zell-Formatvorlage tauschen

Beitrag von balu »

Tach verehrte Comunity,

Praktisch kann ich angewendete Zell-Formatvorlagen tauschen.

Code: Alles auswählen

Sub Main
Dim oDoc as object
oDoc = ThisComponent
oBlatt = oDoc.sheets(2)
cellStyles = oDoc.StyleFamilies.getByName("CellStyles")
vStyle2 = oDoc.createInstance("com.sun.star.style.CellStyle")
for s = 20 to 45
for z = 0 to 42
	Tarnen = oBlatt.getCellByPosition(S,Z)
	if Tarnen.CellStyle = "VorlageEins" then
	   Tarnen.CellStyle = "VorlageZwei"  
	end if
next z	
next s
End Sub
Aber die Experten unter euch ahnen sicherlich schon das dieser Vorgang "Ewigkeiten und 3 Tage" dauert, da es um 26 Spalten und 43 Zeilen geht.
Nun möchte ich das ganze natürlich optimieren. Jedoch weiß ich noch nicht, mit was, und wie am besten. Zwei andere Methoden hat ich mir nun überlegt, wo ich aber nicht weiter komme.

Die 1. wäre mittels DataArray

Code: Alles auswählen

    Sub schnell()
    x = ThisComponent.Sheets().getByIndex(2).getCellRangeByName("U1:AT46")
    Dim daten()
    Dim z()
    daten() = x.getDataArray()
    For i = LBound(daten()) To UBound(daten())
       z() = daten(i)
       For j = LBound(z()) To UBound(z())
          z(j) = i          
       Next
    Next    
    x.setDataArray(daten())
       	if x.CellStyle = "VorlageEins" then
	   x.CellStyle = "VorlageZwei"
	   end if    
    End Sub
Nur das Dumme ist, das ich noch nicht den Durchblick mit dem ganzem UBound & LBound habe. Und mit dem zitierten Code werden auch nur Zahlen in dem genannten Bereich reingeschrieben. Ein tausch der Formatvorlagen geschieht aber nicht, weil ich das wohl irgendwie dort Falsch angehe. Nur wie müsste ich das richtig machen?
Ich vermute aber wohl ehern das mein Vorhaben damit nicht zu realisieren ist. Oder etwa doch?

Den Beispielcode hatte ich hier vom Moderator Stephan gefunden. Bis auf die zusätzlichen CellStyle Zeilen, die hat ich mal so eben reingeschustert.


Die 2. Methode die ich mir da überlegt hatte, war mittels Replacedescriptor.

Code: Alles auswählen

sub tarn
Dim oDoc as object
oDoc = ThisComponent
osheet = oDoc.sheets(2)
cellStyles = oDoc.StyleFamilies.getByName("CellStyles")
vStyle = oDoc.createInstance("com.sun.star.style.CellStyle")
oRange = osheet.getCellRangeByName("U1:AT46")
'oSuchen = oRange.createReplaceDescriptor
oRange.createSearchDescriptor.SearchStyles = true
oRange.createReplaceDescriptor.SearchStyles = true
'oSuchen.setSearchString("VorlageEins")
'oSuchen.setReplaceString("VorlageZwei")
'orange.replaceAll(oSuchen)
xray oRange
end sub
Aber auch hier komm ich nicht so recht weiter, troz xray häng ich fest. Wie ich mittels Replacedescriptor in einem Blatt Suchen & Ersetzen kann, weiß ich, hab ich schon mehrfach angewendet. Nur jetzt in diesem Falle kann ich das nicht passend umschreiben, da nicht in einer Zelle gesucht wird, sondern in einer ganz anderen Ebene (oder so ähnlich).

Meine Generellen Fragen lauten.
- Welche Methode ist denn besser dafür geeignet die angewendeten Formatvorlagen am schnellsten zu tauschen, Nr.1 oder Nr.2?
- Oder muss ich ein anderen Weg finden und nehmen, als die beien genannten?
- Wenn beide funktionieren würden, welche wäre denn dann wohl am schnellsten?
- Könnt ihr mir bitte wieder behilflich sein?

Freue mich schon auf eure Antworten, und bedanke mich schon mal für eure Bemühungen.


Gruß
balu
Sei öfter mal ein Faultier, sag öfter mal "Ach was!" Dann kriegst du keinen Herzinfarkt, und hast ne menge Spass.

wehr rächtschraipfähler findet khan si behalden :D
Benutzeravatar
komma4
********
Beiträge: 5332
Registriert: Mi, 03.05.2006 23:29
Wohnort: Chon Buri Thailand Asia
Kontaktdaten:

Re: Calc: Angewendete Zell-Formatvorlage tauschen

Beitrag von komma4 »

balu hat geschrieben:- Oder muss ich ein anderen Weg finden und nehmen, als die beien genannten?
Am Schnellsten funktioniert hier die Aufzeichnung eines Makros mit Ersetzen der Vorlage 8)
Cheers
Winfried
aktuell: LO 5.3.5.2 30m0(Build:2) SUSE rpm, unter Linux openSuSE Leap 42.3 x86_64/KDE5
DateTime2 Einfügen von Datum/Zeit/Zeitstempel (als OOo Extension)
Benutzeravatar
komma4
********
Beiträge: 5332
Registriert: Mi, 03.05.2006 23:29
Wohnort: Chon Buri Thailand Asia
Kontaktdaten:

Re: Calc: Angewendete Zell-Formatvorlage tauschen

Beitrag von komma4 »

klappt natürlich auch (gerade getestet)

Code: Alles auswählen


oRange = ThisComponent.Sheets().getByName( "Tabelle3").getCellRangeByName( "U1:AT46" ) 
oSuchen = oRange.createReplaceDescriptor()

With oSuchen
 .SearchStyles = TRUE
 .SearchString = "Vorlage1"
 .ReplaceString = "Vorlage2"
End With

oRange.replaceAll( oSuchen ) 
Cheers
Winfried
aktuell: LO 5.3.5.2 30m0(Build:2) SUSE rpm, unter Linux openSuSE Leap 42.3 x86_64/KDE5
DateTime2 Einfügen von Datum/Zeit/Zeitstempel (als OOo Extension)
Benutzeravatar
balu
********
Beiträge: 3812
Registriert: Fr, 24.08.2007 00:28
Wohnort: Warstein

Re: Calc: Angewendete Zell-Formatvorlage tauschen

Beitrag von balu »

Hallo Winfried,

danke schön für deine Schnelle Antwort :D.
Am Schnellsten funktioniert hier die Aufzeichnung eines Makros mit Ersetzen der Vorlage
Hast recht, hätte ich auch selber drauf kommen können. Nur wäre der gesamte Code dafür um ein vielfaches größer geworden. Zumal es sich um mehrere Bereiche und Blätter handelt. Aber das ist jetzt auch nicht weiter wichtig.

klappt natürlich auch (gerade getestet)
Und wie das Klappt! Einfach Klasse :D.
So kurz hätte ich es mir wirklich nicht vorgestellt. Aber auch das werd ich wohl noch lernen und begreifen.


Gruß
balu
Sei öfter mal ein Faultier, sag öfter mal "Ach was!" Dann kriegst du keinen Herzinfarkt, und hast ne menge Spass.

wehr rächtschraipfähler findet khan si behalden :D
Karolus
********
Beiträge: 7532
Registriert: Mo, 02.01.2006 19:48

Re: Calc: Angewendete Zell-Formatvorlage tauschen

Beitrag von Karolus »

Hallo

Code: Alles auswählen

Sub PageStyleaufStandardzuruecksetzen
thiscomponent.sheets(0).pagestyle = "Default"
End Sub
LO7.4.7.2 debian 12(bookworm) auf Raspberry5 8GB (ARM64)
LO25.2.3.2 flatpak debian 12(bookworm) auf Raspberry5 8GB (ARM64)
Benutzeravatar
komma4
********
Beiträge: 5332
Registriert: Mi, 03.05.2006 23:29
Wohnort: Chon Buri Thailand Asia
Kontaktdaten:

Re: Calc: Angewendete Zell-Formatvorlage tauschen

Beitrag von komma4 »

foobar^2 hat geschrieben:Die Seiten-Formatvorlage soll einfach auf "Standard" zurückgesetzt werden.
Dafür braucht es kein "Range-Objekt", nur den folgenden Einzeiler

Code: Alles auswählen

ThisComponent.Sheets().getByIndex( 0 ).PageStyle = "Standard"
Cheers
Winfried
aktuell: LO 5.3.5.2 30m0(Build:2) SUSE rpm, unter Linux openSuSE Leap 42.3 x86_64/KDE5
DateTime2 Einfügen von Datum/Zeit/Zeitstempel (als OOo Extension)
Benutzeravatar
komma4
********
Beiträge: 5332
Registriert: Mi, 03.05.2006 23:29
Wohnort: Chon Buri Thailand Asia
Kontaktdaten:

Re: Calc: Angewendete Zell-Formatvorlage tauschen

Beitrag von komma4 »

foobar^2 hat geschrieben:Oh man ... eindeutig zu warm heut.
Du hast gut reden... bei mir sind es 31 Grad (21:30h)... in der Unterwäsche vor'm Ventilator 8) :lol:
Cheers
Winfried
aktuell: LO 5.3.5.2 30m0(Build:2) SUSE rpm, unter Linux openSuSE Leap 42.3 x86_64/KDE5
DateTime2 Einfügen von Datum/Zeit/Zeitstempel (als OOo Extension)
Antworten