von F3K Total » So, 28.04.2013 22:19
Nina L. hat geschrieben:Gibt es nicht eine möglichkeit ...
... klar gibt es diese Möglichkeit, wenn Du es programmierst.
Ich habe jetzt den Fehler in meinem Makro beseitigt, hier der neue Code und eine Beispieldatei.
Code: Alles auswählen
Sub S_Eraese_doubles
osel = thiscomponent.currentselection
if osel.supportsservice("com.sun.star.sheet.SheetCellRange") then
oRange = osel
aformula = orange.getformulaarray 'Daten auslesen
nrows = Ubound (aformula)
ncolumns = Ubound(aformula(0))
dim vFormula(ncolumns,nrows)
for k = 0 to nrows 'Daten in 2D-Array übertragen
arow = aformula(k)
for i= 0 to ncolumns
vformula (i,k) = arow(i)
next i
next k
for i = 0 to ncolumns 'Doubletten löschen
for j = nrows to 1 step -1
for k = j-1 to 0 step -1
if vformula(i,j) = vformula(i,k) then
vformula(i,j) = ""
exit for
endif
next k
next j
next i
for k = 0 to ncolumns 'Leere Felder löschen
EmptyCounter = 0
bfound = false
for i = 1 to nrows
if vformula(k,i) = "" then
EmptyCounter = i
bfound = true
exit for
endif
next i
for j = EmptyCounter+1 to nrows
if bfound and vformula(k,j) <> "" then
vformula(k,EmptyCounter) = vformula(k,j)
vformula(k,j) = ""
EmptyCounter = EmptyCounter +1
endif
next j
next k
for k = 0 to nrows 'Daten in 1D-Array(1D-Array) zurückschreiben
arow = aformula(k)
for i= 0 to ncolumns
arow(i) = vformula (i,k)
next i
next k
oRange.setformulaarray(aformula) 'Daten in Tabelle zurückschreiben
msgbox "fertig"
else
msgbox "Bitte einen zusammenhängenden Zellbereich selektieren"
endif
End Sub
Nina L. hat geschrieben:Aber was fange ich mit dem Codefragment an? Oder dient das nur der internen Kommunikation zwischen Euch?
Nein, das ist ein Macro, in Python geschrieben, verrichtet den gleichen Job, vermutlich schneller.
Kannst Du auch verwenden. Es ist allerdings keine Python GUI vorhanden, d.h. der Code muß händisch an die richtige Stelle gebracht werden.
Kann man das etwa so sagen Karolus?
Gruß R
- Dateianhänge
-
- Beispiel Dubletten nach Zeilen.ods
- (18.11 KiB) 230-mal heruntergeladen
[quote="Nina L."]Gibt es nicht eine möglichkeit ... [/quote]
... klar gibt es diese Möglichkeit, wenn Du es programmierst.
Ich habe jetzt den Fehler in meinem Makro beseitigt, hier der neue Code und eine Beispieldatei.
[code]Sub S_Eraese_doubles
osel = thiscomponent.currentselection
if osel.supportsservice("com.sun.star.sheet.SheetCellRange") then
oRange = osel
aformula = orange.getformulaarray 'Daten auslesen
nrows = Ubound (aformula)
ncolumns = Ubound(aformula(0))
dim vFormula(ncolumns,nrows)
for k = 0 to nrows 'Daten in 2D-Array übertragen
arow = aformula(k)
for i= 0 to ncolumns
vformula (i,k) = arow(i)
next i
next k
for i = 0 to ncolumns 'Doubletten löschen
for j = nrows to 1 step -1
for k = j-1 to 0 step -1
if vformula(i,j) = vformula(i,k) then
vformula(i,j) = ""
exit for
endif
next k
next j
next i
for k = 0 to ncolumns 'Leere Felder löschen
EmptyCounter = 0
bfound = false
for i = 1 to nrows
if vformula(k,i) = "" then
EmptyCounter = i
bfound = true
exit for
endif
next i
for j = EmptyCounter+1 to nrows
if bfound and vformula(k,j) <> "" then
vformula(k,EmptyCounter) = vformula(k,j)
vformula(k,j) = ""
EmptyCounter = EmptyCounter +1
endif
next j
next k
for k = 0 to nrows 'Daten in 1D-Array(1D-Array) zurückschreiben
arow = aformula(k)
for i= 0 to ncolumns
arow(i) = vformula (i,k)
next i
next k
oRange.setformulaarray(aformula) 'Daten in Tabelle zurückschreiben
msgbox "fertig"
else
msgbox "Bitte einen zusammenhängenden Zellbereich selektieren"
endif
End Sub[/code]
[quote="Nina L."]Aber was fange ich mit dem Codefragment an? Oder dient das nur der internen Kommunikation zwischen Euch?[/quote]
Nein, das ist ein Macro, in Python geschrieben, verrichtet den gleichen Job, vermutlich schneller.
Kannst Du auch verwenden. Es ist allerdings keine Python GUI vorhanden, d.h. der Code muß händisch an die richtige Stelle gebracht werden.
Kann man das etwa so sagen Karolus?
Gruß R