[GELÖST] Leere Zellen rausfiltern und nur Werte in neue Tabelle übertragen

Antwort erstellen


BBCode ist eingeschaltet
[img] ist ausgeschaltet
[url] ist eingeschaltet
Smileys sind ausgeschaltet

Die letzten Beiträge des Themas
   

Ansicht erweitern Die letzten Beiträge des Themas: [GELÖST] Leere Zellen rausfiltern und nur Werte in neue Tabelle übertragen

Re: Leere Zellen rausfiltern und nur Werte in neue Tabelle übertragen

von MASP47 » Fr, 10.06.2022 21:08

Der Hammer!

Vielen Dank Karolus, für deine großartige Unterstützung!

Lieben Gruß und schönes Wochenende 8)
Andi

Re: Leere Zellen rausfiltern und nur Werte in neue Tabelle übertragen

von Karolus » Fr, 10.06.2022 13:48

Hallo
Kann man die Python Makros auch in ein ODS Dokument integrieren, wie Basic Makros
Ja, das hab ich ja auch gemacht in der calc_export.ods.

Es gibt dafür eine Anfängerfreunliche Erweiterung, lade dir von hier die Datei `apso.oxt` herunter und öffne sie mit libreoffice.

Re: Leere Zellen rausfiltern und nur Werte in neue Tabelle übertragen

von MASP47 » Fr, 10.06.2022 13:18

Wow, vielen Dank Karolus!

Das funktioniert super!

Kann man die Python Makros auch in ein ODS Dokument integrieren, wie Basic Makros? Also, dass man sie im Dokument speichert, mein ich.

Vielen Dank und LG
Andi

Re: Leere Zellen rausfiltern und nur Werte in neue Tabelle übertragen

von Karolus » Fr, 10.06.2022 12:08

Hallo

Wenn du in der angehängen Calcdatei auf die Schaltfläche klickst, wird die eingebettete some_filter.py an die richtige Stelle deiner Benutzerkonfiguration kopiert.
Danach kannst du aus deiner CalcDatei die du filtern willst, →→Extras→Makros→Makros ausführen …Meine Makros→some_filter→→filter_non_empty ausführen.

Re: Leere Zellen rausfiltern und nur Werte in neue Tabelle übertragen

von MASP47 » Fr, 10.06.2022 11:42

Hallo Karolus,
vielen Dank! Leider habe ich damit überhaupt keine Erfahrung. Wärst du so nett und könntest mir ganz kurz erklären, was ich da machen muss?
Vielen Dank und liebe Grüße,
Andi

Re: Leere Zellen rausfiltern und nur Werte in neue Tabelle übertragen

von Karolus » Fr, 10.06.2022 10:39

Ja, das ist python, im Anhang eine …ods mit einer Exportfunktion in deine Benutzerkonfiguration.

Hier nochmal der Quellcode für den Export:

Code: Alles auswählen

from pathlib import Path

def copy_to_user_path(*_, fname='some_filter.py'):
    doc =XSCRIPTCONTEXT.getDocument()
    sm = XSCRIPTCONTEXT.ctx.ServiceManager
    sfa = sm.createInstance("com.sun.star.ucb.SimpleFileAccess")
    substitute = sm.createInstance("com.sun.star.util.PathSubstitution")
    config_path = substitute.substituteVariables('$(user)/Scripts/python/', True)
    if not sfa.exists(config_path):
        sfa.createFolder(config_path)
    sfa.copy(f"{Path(__file__).with_name( fname )}", f"{ config_path }/{ fname }")
calc_datei_mit_Export.ods
(9.55 KiB) 87-mal heruntergeladen

Re: Leere Zellen rausfiltern und nur Werte in neue Tabelle übertragen

von MASP47 » Fr, 10.06.2022 07:06

Hallo Karolus,

ist das ein Python Code?

LG Andi

Re: Leere Zellen rausfiltern und nur Werte in neue Tabelle übertragen

von MASP47 » Do, 09.06.2022 21:09

Hallo Karolus,

danke für die Antwort! Leider weiß ich mit dem Code nicht viel anzufangen. Ich bekomme nur Fehlermeldungen..

LG Andi

Re: Leere Zellen rausfiltern und nur Werte in neue Tabelle übertragen

von Karolus » Do, 09.06.2022 13:57

Code: Alles auswählen

def filter_non_empty(*_):

    doc = XSCRIPTCONTEXT.getDocument()
    data = doc.Sheets["Daten"]["E2:E1000"].DataArray
    out = tuple(row for row in data if row[0] != "") # !! ONE Column
    zieltabelle = doc.Sheets["REFilter"]
    zieltabelle["A1:B1000"].clearContents(1023)
    cursor = zieltabelle.createCursorByRange( zieltabelle["A1"] )
    cursor.collapseToSize(len(out[0]), len(out))
    cursor.DataArray = out

[GELÖST] Leere Zellen rausfiltern und nur Werte in neue Tabelle übertragen

von MASP47 » Do, 09.06.2022 09:17

Liebes Forum!
Ich möchte per Makro aus einer Spalte alle Werte in eine neue Tabelle kopieren, die nicht leer sind. Dafür hab ich auch ein funktionierendes Makro:

Code: Alles auswählen

Sub NullenRausFiltern
oSheet = ThisComponent.Sheets.getByName("Daten")
sRange = "E2:E1000"
oSourceRange = oSheet.getCellRangeByName(sRange)
ThisComponent.Sheets.getByName("REFilter").getCellRangeByName("A1:B1000").clearContents(1023)
Dim oFields(0) As New com.sun.star.sheet.TableFilterField
oFields(0).Field=0
oFields(0).IsNumeric = True
oFields(0).Operator = com.sun.star.sheet.FilterOperator.NOT_EMPTY
oFilterDesc = oSourceRange.createFilterDescriptor(True)
oFilterDesc.setFilterFields(oFields())
oFilterDesc.SkipDuplicates = False
oFilterDesc.IsCaseSensitive = False
oFilterDesc.ContainsHeader = True
oFilterDesc.CopyOutputData = True
oFilterDesc.OutputPosition = ThisComponent.Sheets.getByName("REFilter").getCellRangeByName("A1").cellAddress
oSourceRange.Filter(oFilterDesc)
End Sub
Das hat bisher wie gesagt ganz gut funktioniert, allerdings waren bisher nur Zahlenwerte in den Zellen des Quellbereichs. Das hat sich nun geändert, das heißt, ich habe Formeln im Quellbereich, die entweder einen Zahlenwert aus geben oder "leer" bleiben. Jetzt meine Frage, wie muss ich das Makro ändern, damit erstens nur die Zahlenwerte kopiert werden und zweitens die "leeren" Zeilen nicht mitkopiert werden?

Vielen Dank im Voraus und lieben Gruß,
Andi

Nach oben