Seite 1 von 1
Filedialog: OpenFile
Verfasst: Mi 3. Jul 2024, 14:20
von StefKe
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
Re: Filedialog: OpenFile
Verfasst: Mi 3. Jul 2024, 17:01
von karolus
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)
Re: Filedialog: OpenFile
Verfasst: Mi 3. Jul 2024, 17:44
von StefKe
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
Re: Filedialog: OpenFile
Verfasst: Mi 3. Jul 2024, 18:07
von karolus
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
Re: Filedialog: OpenFile
Verfasst: Mi 3. Jul 2024, 21:30
von StefKe
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.
ist die elegantere Lösung, ich hätte es glattweg per Schleife umgesetzt.
Danke - Stefan
Re: Filedialog: OpenFile
Verfasst: Do 4. Jul 2024, 08:33
von karolus
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
Re: Filedialog: OpenFile
Verfasst: Do 4. Jul 2024, 09:05
von StefKe
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
Re: Filedialog: OpenFile
Verfasst: Do 4. Jul 2024, 09:18
von karolus
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

aber da solltest Du ne neue Frage stellen, hier sind wir schon etwas abgekommen vom ursprünglichen Thema.
Re: Filedialog: OpenFile
Verfasst: Do 4. Jul 2024, 09:23
von StefKe
karolus hat geschrieben: ↑Do 4. Jul 2024, 09:18
ein klares Jein

- nu, die Frage stelle ich neu...