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