❤️ Helfen Sie noch heute, unser LibreOffice Forum zu erhalten! ❤️
Unterstützen Sie das LibreOffice-Forum und helfen Sie uns, unser Ziel für 2025 zu erreichen!

🍀 Jeder Beitrag zählt – vielen Dank für Ihre Unterstützung!🍀
Mit Ihrer Spende sichern Sie den Fortbestand, den Ausbau und die laufenden Kosten dieses Forums. 🌱


❤️ DANKE >> << DANKE ❤️

>> Dank Ihrer Unterstützung -> Keine Werbung für alle registrierten LibreOffice-Forum User! <<
🤗 Als Dankeschön werden Sie im Forum als LO-SUPPORTER gekennzeichnet. 🤗

Filedialog: OpenFile

Alles zur Programmierung im LibreOffice.
Antworten
StefKe
Beiträge: 68
Registriert: Sa 5. Nov 2022, 18:47

Filedialog: OpenFile

Beitrag von StefKe » Mi 3. Jul 2024, 14:20

Hallo, ich versuche grad eine csv-Datei mittels Python zu öffnen:

Code: Alles auswählen

import csv
from tkinter import filedialog 


def import_csv():
    root = filedialog.Tk()
    root.withdraw()
    filter = (("csv","*.csv"),)
    filename = filedialog.askopenfilename(
        initialdir="C:/Users/Stefan/Downloads",
        filetypes= filter,    
    )
    print(filename)
    with open(filename) as f:
        reader = csv.reader(f, delimiter = ';')
        i = 0
        werte = [""]
        for row in reader:
            if row[0] != '':
                werte[0] = [row[0],row[14]]
            i += 1

if __name__ == "__main__":
    import_csv()
Unter Python 3.12.2 funzt es, aber unter Python 3.8.19 wird gemeckert.
No module named '_tkinter'
Gibt es dafür einen Lösung?

Danke - Stefan

Benutzeravatar
karolus
* LO-Experte *
Beiträge: 2580
Registriert: Fr 10. Dez 2010, 10:01

Re: Filedialog: OpenFile

Beitrag von karolus » Mi 3. Jul 2024, 17:01

Hallo
Ich würde mich an deiner Stelle zuerstmal mit csv alleine beschäftigen, daß was du da machst sieht irgendwie komisch aus!

Ansonsten… Ausserhalb LO mit python3.12 nimm tkinter.

und mit Zugriff auf LO nimmst du LO-dialoge:

Code: Alles auswählen

import uno, csv

createUnoService = XSCRIPTCONTEXT.ctx.ServiceManager.createInstance

def get_csv_file(*_):
    oFP = createUnoService("com.sun.star.ui.dialogs.FilePicker")
    oFP.appendFilter("Text_csv", "*.csv")
    if oFP.execute():
        return uno.fileUrlToSystemPath( oFP.Files[0] )

def main():
    csv_file = get_csv_file()
    if csv_file:
        with open(csv_file) as file:
            reader = csv.reader( file, dialect=csv.excel) #fix me
            for row in reader:
                print(row)
LO25.2.x.y debian 13(trixie) auf Raspberry5 8GB (64bit)
LO25.8.x.y flatpak debian 13(trixie) auf Raspberry5 8GB (64bit)

StefKe
Beiträge: 68
Registriert: Sa 5. Nov 2022, 18:47

Re: Filedialog: OpenFile

Beitrag von StefKe » Mi 3. Jul 2024, 17:44

Danke, der Code läuft... sehr schön. Irgendwann werde ich hoffentlich die Hirarchie von createUnoService("com.sun.star.ui.dialogs.FilePicker") verstehen :)
karolus hat geschrieben:
Mi 3. Jul 2024, 17:01
daß was du da machst sieht irgendwie komisch aus
Benötigt werden von jeder Zeile nur das Element 1 und 14, wenn des Element 0 ungleich "" ist. So soll die csv in ein Array "verdichtet" und anschließend in eine Tabelle eingetragen werden, das ist der Plan. Die for-Schleife aus den ersten Thread muss noch komplettiert werden.

Danke - Stefan

Benutzeravatar
karolus
* LO-Experte *
Beiträge: 2580
Registriert: Fr 10. Dez 2010, 10:01

Re: Filedialog: OpenFile

Beitrag von karolus » Mi 3. Jul 2024, 18:07

Hallo
Du meinst etwa so:

Code: Alles auswählen

def main():
    csv_file = get_csv_file()
    out = []
    if csv_file:
        with open(csv_file) as file:
            reader = csv.reader( file, dialect=csv.excel) #fix me
            for row in reader:
                if row[0].strip():
                    out.append((row[1], row[14]))
    doc = XSCRIPTCONTEXT.getDocument()
    sheet = doc.Sheets["Tabelle1"]
    sheet[:len(out),:2].DataArray = out
LO25.2.x.y debian 13(trixie) auf Raspberry5 8GB (64bit)
LO25.8.x.y flatpak debian 13(trixie) auf Raspberry5 8GB (64bit)

StefKe
Beiträge: 68
Registriert: Sa 5. Nov 2022, 18:47

Re: Filedialog: OpenFile

Beitrag von StefKe » Mi 3. Jul 2024, 21:30

Dankeschön, delimiter ist auf ';' geändert.

Code: Alles auswählen

def main():
    csv_file = get_csv_file()
    out = []
    if csv_file:
        with open(csv_file) as file:
            reader = csv.reader( file, delimiter = ';') #fix me
            for row in reader:
                if row[0] != "":
                    out.append([row[0], row[14]])
    
    doc = XSCRIPTCONTEXT.getDocument()
    sheet = doc.Sheets["Tabelle1"]
    sheet[:len(out),:2].DataArray = out
tut was es soll.

Code: Alles auswählen

sheet[:len(out),:2].DataArray = out
ist die elegantere Lösung, ich hätte es glattweg per Schleife umgesetzt.

Danke - Stefan

Benutzeravatar
karolus
* LO-Experte *
Beiträge: 2580
Registriert: Fr 10. Dez 2010, 10:01

Re: Filedialog: OpenFile

Beitrag von karolus » Do 4. Jul 2024, 08:33

Hallo

die reader-for schleife in kompakt:

Code: Alles auswählen

def main():
    csv_file = get_csv_file()
    if csv_file:
        with open(csv_file) as file:
            reader = csv.reader( file, delimiter = ';') #fix me
            out = [(row[1], row[14]) for row in reader if row[0] != "" ]
    doc = XSCRIPTCONTEXT.getDocument()
    sheet = doc.Sheets["Tabelle1"]
    sheet[:len(out),:2].DataArray = out
Zuletzt geändert von karolus am Do 4. Jul 2024, 09:06, insgesamt 1-mal geändert.
LO25.2.x.y debian 13(trixie) auf Raspberry5 8GB (64bit)
LO25.8.x.y flatpak debian 13(trixie) auf Raspberry5 8GB (64bit)

StefKe
Beiträge: 68
Registriert: Sa 5. Nov 2022, 18:47

Re: Filedialog: OpenFile

Beitrag von StefKe » Do 4. Jul 2024, 09:05

Unglaublich, da geht noch was :-) ... das ist für mich schon höhere Mathematik :)
aber an
dialect=csv.excel
bricht der Code ab. Debugging in APSO zeigt, dass als Trennzeichen ein ',' verwendet wird.
Unter Verwendung von
delimiter = ';'
werden die Elemente korrekt getrennt.

Aber vielleicht noch ne andere Frage: Kann per Python auf die LO-eigenen Funktionen (ANZAHL2() etc.) zugegriffen werden. Ich hatte irgendwo das gefunden, aber leider wo???

Danke - Stefan

Benutzeravatar
karolus
* LO-Experte *
Beiträge: 2580
Registriert: Fr 10. Dez 2010, 10:01

Re: Filedialog: OpenFile

Beitrag von karolus » Do 4. Jul 2024, 09:18

StefKe hat geschrieben:
Do 4. Jul 2024, 09:05
Unglaublich, da geht noch was :-) ... das ist für mich schon höhere Mathematik :)
aber an
dialect=csv.excel
bricht der Code ab. Debugging in APSO zeigt, dass als Trennzeichen ein ',' verwendet wird.
Unter Verwendung von
delimiter = ';'
werden die Elemente korrekt getrennt.
entschuldigung … hab ich korrigiert!
StefKe hat geschrieben:
Do 4. Jul 2024, 09:05
Aber vielleicht noch ne andere Frage: Kann per Python auf die LO-eigenen Funktionen (ANZAHL2() etc.) zugegriffen werden. Ich hatte irgendwo das gefunden, aber leider wo???
ein klares Jein 8-) aber da solltest Du ne neue Frage stellen, hier sind wir schon etwas abgekommen vom ursprünglichen Thema.
LO25.2.x.y debian 13(trixie) auf Raspberry5 8GB (64bit)
LO25.8.x.y flatpak debian 13(trixie) auf Raspberry5 8GB (64bit)

StefKe
Beiträge: 68
Registriert: Sa 5. Nov 2022, 18:47

Re: Filedialog: OpenFile

Beitrag von StefKe » Do 4. Jul 2024, 09:23

karolus hat geschrieben:
Do 4. Jul 2024, 09:18
ein klares Jein 8-)
:lol: - nu, die Frage stelle ich neu...


An alle, die das LibreOffice-Forum gern nutzen und unterstützen wollen:


Bitte helfen Sie uns mit 7 Euro pro Monat.
Durch Ihren Beitrag tragen Sie dazu bei, unsere laufenden Kosten für die kommenden Monate zu decken.
Unkompliziert per Kreditkarte oder PayPal.
Als ein kleines Dankeschön werden Sie im LO-Forum als SUPPORTER gekennzeichnet.



Antworten