Tabelle von Dubletten in Spalten befreien
Moderator: Moderatoren
-
- *******
- Beiträge: 1763
- Registriert: Di, 03.10.2006 18:05
Re: Tabelle von Dupletten in Spalten befreien
Hallo Nina,
könntest Du uns mal den " Sinn und Zweck " dieser Aufgabe näherbringen ?
Bei 120 Spalten können also auch 120_Buchstaben eingegeben werden, das wäre 4,6 mal das "ABC" á 26_Buchstaben ?
mfg
Gert
könntest Du uns mal den " Sinn und Zweck " dieser Aufgabe näherbringen ?
Bei 120 Spalten können also auch 120_Buchstaben eingegeben werden, das wäre 4,6 mal das "ABC" á 26_Buchstaben ?
mfg
Gert
Es gibt nichts gutes, außer man tut es.
Win7_64 / LO_4.4.5.2
Win7_64 / LO_4.4.5.2
Re: Tabelle von Dupletten in Spalten befreien
Richtig, man muss die Suche selbst wandeln (und den wichtigsten Begriff richtig schreiben, sonst kann die Suche nicht funktionieren). Die erste Suche nach "Doubletten Spalten" liefert keinen Treffer, die zweite Suche nach "Doubletten" liefert einen Treffer und dabei den passenden Suchbegriff. Mit der Suche nach "doppelte Werte" bekommst du eine Reihe von Anregungen. JürgenNina L. hat geschrieben:leider finde ich im Forum keine Hilfsthema:
Situation: LibO 3.6 auf Win 7 Home Premium (64-bit) mit MySQL (localhost) über JDBC
Re: Tabelle von Dupletten in Spalten befreien
Charme-Offensive?Nina L. hat geschrieben:mit einer charmanten Formel und in einem Arbeitsschritt?
Wie passt dein Beispiel zu diesen Anforderungen? Wenn ich das richtig sehe, eliminierst du dort die Dubletten in den Spalten,nicht den Zeilen. Allerdings, so recht passt's dann auch nicht. Erläutere doch bitte mal step by step in einem Beispieldokument, was da im Einzelnen passieren soll. Z.B.: Rutschen Zellen von rechts nach, wenn eine Dublette aus in einer Spalte verschwindet? Wie genau soll das Ersetzen funktionieren?Nina L. hat geschrieben:Wie kann ich eine Tabelle mit 70 zeilen und 120 Spalten von Dubletten innerhalb der einzelnen Zeilen Befreien?
Als angemeldete Benutzerin könntest du das Beispieldokument beim Schreiben einer Antwort unmittelbar hier im Forum hochladen. Gäste, die sich nicht registrieren möchten, müssen einen Filehoster bemühen und die dort generierten Links in ihren Beitrag kopieren. Vgl. Allgemeine Hinweise zur Forumsbenutzung.
Gert, das ist ein Beispiel und die Buchstaben sind PlatzhalterGert Seler hat geschrieben:120 Spalten […] 120_Buchstaben
In diesem Fall präziser: Man muss die Suche für jede richtige Schreibweise durchführen, hier also für »Dubletten« und für »Doubletten«, die vom Duden beide abgesegnet sind. Und selbst dann erwischt man die Beiträge mit tatsächlichen Orthographiefehlern nicht…juetho hat geschrieben:man muss […] den wichtigsten Begriff richtig schreiben
Gruß
lorbass
-
- Beiträge: 2
- Registriert: Mo, 22.04.2013 21:29
Re: Tabelle von Dupletten in Spalten befreien
Hi liebe Leute,
bevor wir das Thema Orthografie vertiefen, lenke ich das Thema zur Sicherheit mal wieder auf Tabellenkalkulation
Anbei findet Ihr zwei Tabellen, deren 4-stellige Nummern je nach "Gruppe" von den Dubletten befreit werden müssten …
bevor wir das Thema Orthografie vertiefen, lenke ich das Thema zur Sicherheit mal wieder auf Tabellenkalkulation
Anbei findet Ihr zwei Tabellen, deren 4-stellige Nummern je nach "Gruppe" von den Dubletten befreit werden müssten …
Re: Tabelle von Dubletten in Spalten befreien
Hi,
das geht z.B. per Makro:
siehe Beispiel
Gruß R
das geht z.B. per Makro:
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
for i = 0 to nrows
if vformula(k,i) = "" then
for j = nrows to i+1 step -1
vformula(k,j-1) = vformula(k,j)
vformula(k,j) = ""
next j
endif
next i
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
Gruß R
- Dateianhänge
-
- Beispiel Dubletten nach Zeilen.ods
- (17.03 KiB) 185-mal heruntergeladen
- miniKasse MMove 1.0.6 Base Videotutorial
- Windows 10: AOO, LO Linux Mint: AOO, LO
Re: Tabelle von Dubletten in Spalten befreien
Hallo
@Rik
Wieso produziert dein Makro unterschiedliche Ergebnisse mit deinen Beispielsdaten wie:
??
Edit: Gelöst _ Dein Code löscht alle mehrfach vorkommenden Einträge - Nina möchte aber einen davon behalten.
Bei "überschaubaren" Daten gibts das gleiche Ergebnis!
@Rik
Wieso produziert dein Makro unterschiedliche Ergebnisse mit deinen Beispielsdaten wie:
Code: Alles auswählen
def columns_set(*dummy):
doc = XSCRIPTCONTEXT.getDocument()
sel = doc.getCurrentSelection()
data = sel.getDataArray()
out = []
for columns in zip(*data):
c = []
for cell in columns:
if cell not in c:
c.append(cell)
c.extend(['']* (len(columns)-len(c)))
out.append(tuple(c))
sel.setDataArray(tuple(zip(*out)))
Edit: Gelöst _ Dein Code löscht alle mehrfach vorkommenden Einträge - Nina möchte aber einen davon behalten.
Bei "überschaubaren" Daten gibts das gleiche Ergebnis!
LO7.4.7.2 debian 12(bookworm) auf Raspberry4b 8GB (64bit)
LO24.8.2.1 flatpak debian 12(bookworm) auf Raspberry4b 8GB (64bit)
LO24.8.2.1 flatpak debian 12(bookworm) auf Raspberry4b 8GB (64bit)
Re: Tabelle von Dubletten in Spalten befreien
Hallo Karolus,
Schaue ich mir später nochmal an.
Gruß Rik
Vermutlich, weil der Code einen Fehler hat;-), danke für den Tipp.Karolus hat geschrieben:Wieso produziert dein Makro unterschiedliche Ergebnisse mit deinen Beispielsdaten wie:
Schaue ich mir später nochmal an.
Gruß Rik
- miniKasse MMove 1.0.6 Base Videotutorial
- Windows 10: AOO, LO Linux Mint: AOO, LO
Re: Tabelle von Dubletten in Spalten befreien
... klar gibt es diese Möglichkeit, wenn Du es programmierst.Nina L. hat geschrieben:Gibt es nicht eine möglichkeit ...
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
Nein, das ist ein Macro, in Python geschrieben, verrichtet den gleichen Job, vermutlich schneller.Nina L. hat geschrieben:Aber was fange ich mit dem Codefragment an? Oder dient das nur der internen Kommunikation zwischen Euch?
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) 205-mal heruntergeladen
- miniKasse MMove 1.0.6 Base Videotutorial
- Windows 10: AOO, LO Linux Mint: AOO, LO
-
- Beiträge: 2
- Registriert: Mo, 22.04.2013 21:29
Re: Tabelle von Dubletten in Spalten befreien
Hey, super,
herzlichen Dank. Morgen ist endlich Ruhe hier, dann werde ich mir das mal ganz in Ruhe ansehen.
LG, NL
herzlichen Dank. Morgen ist endlich Ruhe hier, dann werde ich mir das mal ganz in Ruhe ansehen.
LG, NL
Re: Tabelle von Dubletten in Spalten befreien
Hallo
Karolus
Das stimmt soweit, aber ich hab jetzt noch eine "installier_mich_selbst_an_die_richtige_Stelle"-funktion dazu gepackt: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.
Code: Alles auswählen
import uno
from os import path
try:
context = XSCRIPTCONTEXT
except:
pass
ctx = uno.getComponentContext()
servicemanager = ctx.ServiceManager
createUnoService = servicemanager.createInstance
file_access = createUnoService("com.sun.star.ucb.SimpleFileAccess")
pathsubstution = createUnoService("com.sun.star.util.PathSubstitution")
def install_me(*_):
"""
Funktion zum kopieren dieses eingebetteten Pythonscripts
ins den .userconfig_python_pfad"""
pythonfolder = pathsubstution.substituteVariables('$(user)/Scripts/python/',0)
filename = path.basename(__file__)
if not file_access.isFolder( pythonfolder):
file_access.createFolder(pythonfolder)
file_access.copy(__file__, path.join( pythonfolder, filename))
def columns_set(*_):
"""
Fuer Nina_L
openoffice_info
Thema 61690
"""
doc = context.getDocument()
sel = doc.getCurrentSelection()
data = sel.getDataArray()
out = []
for columns in zip(*data):
c = []
for cell in columns:
if cell not in c:
c.append(cell)
c.extend(['']* (len(columns)-len(c)))
out.append(tuple(c))
sel.setDataArray(tuple(zip(*out)))
LO7.4.7.2 debian 12(bookworm) auf Raspberry4b 8GB (64bit)
LO24.8.2.1 flatpak debian 12(bookworm) auf Raspberry4b 8GB (64bit)
LO24.8.2.1 flatpak debian 12(bookworm) auf Raspberry4b 8GB (64bit)