Problem bei Daten aus Excel auslesen

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
piniuus
User
Beiträge: 4
Registriert: Freitag 20. Mai 2016, 18:43

Hallo!

hatte hier bereits schon mal geschrieben und habe noch ein Problem mit meinem Programm.
Also ich wollte ein Programm schreiben, mit dem ich Daten aus Excel auslesen kann und diese dann in CSV speichern.

mein Programm habe ich für eine "Muster-Datei" geschreiben, bei der auch alles soweit funktioniert, bis auf das Datum.
Da bekomme ich einen Wert wie etwa "39931". Excel hat ja eine bestimmte Zählmethode, kann man das irgendwie umrechnen? in erster Linie interessiert mich auch nur die Jahreszahl.

Bei anderen Dateien habe ich aber das Problem, dass nicht alle zu lesenden Zellen einen gültigen Wert haben. Da gibt mir dann das Programm statt "Div/0" oder eben einem Fehler eine "7" aus.

Ich werde mal das komplette Programm hier rein stellen und hoffe das man mir weiter helfen kann.
Vielen Dank vorab schon mal!

Code: Alles auswählen

#import module
import xlrd
import csv
from tkinter import messagebox
from tkinter import *
from tkinter import ttk
from tkinter.filedialog import askopenfilename
root = Tk()
Title = root.title( "File Opener")
label = ttk.Label(root, text =" Dateiname angeben",foreground="blue",font=("Helvetica", 12))
label.pack()
eingabe = Entry(root)         ## Eingabezeile erzeugen
eingabe.pack()
def OpenFile():
    name = askopenfilename(filetypes =(("Excel File", "*.xls"),("All Files","*.*")),
                           title = "Wähle eine xls Datei.")
    print (name)
#def callback():
    #file_location = OpenFile
    workbook = xlrd.open_workbook(name)
    sheet = workbook.sheet_by_index(0)
    ztest=(sheet.cell_value(0, 0))
    if ztest!= "krl":
        messagebox.showinfo("ERROR", "Ungültige Datei ausgewählt!")
    else:
        try:
            z1 = (sheet.cell_value(5, 2))
            z2 = (sheet.cell_value(15, 2))
            z3 = float(sheet.cell_value(67, 13))
            z4 = float(sheet.cell_value(68, 13))
            z5 = float(sheet.cell_value(69, 13))
            z6 = (sheet.cell_value(63, 13))
            z7 = float(sheet.cell_value(71,10))
            z8 = float(sheet.cell_value(3, 5))
            z9 = (sheet.cell_value(5, 2))
            z10 = (sheet.cell_value(15, 2))
            z11 = (sheet.cell_value(67, 17))
            z12 = (sheet.cell_value(68, 17))
            z13 = (sheet.cell_value(69, 17))
            z14 = (sheet.cell_value(63, 17))
            z15 = (sheet.cell_value(71,14))
            z16 = (sheet.cell_value(3, 14))
            z17 = (sheet.cell_value(5, 2))
            z18 = (sheet.cell_value(15, 2))
            z19 = (sheet.cell_value(67, 21))
            z20 = (sheet.cell_value(68, 21))
            z21 = (sheet.cell_value(69, 21))
            z22 = (sheet.cell_value(63, 21))
            z23 = (sheet.cell_value(71,18))
            z24 = (sheet.cell_value(3, 18))
            z25 = (sheet.cell_value(5, 2))
            z26 = (sheet.cell_value(15, 2))
            z27 = (sheet.cell_value(67, 29))
            z28 = (sheet.cell_value(68, 29))
            z29 = (sheet.cell_value(69, 29))
            z30 = (sheet.cell_value(63, 29))
            z31 = (sheet.cell_value(71,26))
            z32 = (sheet.cell_value(3, 26))
            z33 = (sheet.cell_value(5, 2))
            z34 = (sheet.cell_value(15, 2))
            z35 = (sheet.cell_value(67, 33))
            z36 = (sheet.cell_value(68, 33))
            z37 = (sheet.cell_value(69, 33))
            z38 = (sheet.cell_value(63, 33))
            z39 = (sheet.cell_value(71,30))
            z40 = (sheet.cell_value(3, 30))
            z41 = (sheet.cell_value(5, 2))
            z42 = (sheet.cell_value(15, 2))
            z43 = (sheet.cell_value(67, 37))
            z44 = (sheet.cell_value(68, 37))
            z45 = (sheet.cell_value(69, 37))
            z46 = (sheet.cell_value(63, 37))
            z47 = (sheet.cell_value(71,34))
            z48 = (sheet.cell_value(3,34))
            z49 = (sheet.cell_value(5, 2))
            z50 = (sheet.cell_value(15, 2))
            z51 = (sheet.cell_value(67, 45))
            z52 = (sheet.cell_value(68, 45))
            z53 = (sheet.cell_value(69, 45))
            z54 = (sheet.cell_value(63, 45))
            z55 = (sheet.cell_value(71,42))
            z56 = (sheet.cell_value(3, 42))
            z57 = (sheet.cell_value(5, 2))
            z58 = (sheet.cell_value(15, 2))
            z59 = (sheet.cell_value(67, 49))
            z60 = (sheet.cell_value(68, 49))
            z61 = (sheet.cell_value(69, 49))
            z62 = (sheet.cell_value(63, 49))
            z63 = (sheet.cell_value(71,46))
            z64 = (sheet.cell_value(3,46))
            z65 = (sheet.cell_value(5, 2))
            z66 = (sheet.cell_value(15, 2))
            z67 = (sheet.cell_value(67, 53))
            z68 = (sheet.cell_value(68, 53))
            z69 = (sheet.cell_value(69, 53))
            z70 = (sheet.cell_value(63, 53))
            z71 = (sheet.cell_value(71,50))
            z72 = (sheet.cell_value(3, 50))
            z73 = (sheet.cell_value(5, 2))
            z74 = (sheet.cell_value(15, 2))
            z75 = (sheet.cell_value(67, 61))
            z76 = (sheet.cell_value(68, 61))
            z77 = (sheet.cell_value(69, 61))
            z78 = (sheet.cell_value(63, 61))
            z79 = (sheet.cell_value(71,58))
            z80 = (sheet.cell_value(3, 58))
            z81 = (sheet.cell_value(5, 2))
            z82 = (sheet.cell_value(15, 2))
            z83 = (sheet.cell_value(67, 65))
            z84 = (sheet.cell_value(68, 65))
            z85 = (sheet.cell_value(69, 65))
            z86 = (sheet.cell_value(63, 65))
            z87 = (sheet.cell_value(71,62))
            z88 = (sheet.cell_value(3, 62))
            z89 = (sheet.cell_value(5, 2))
            z90 = (sheet.cell_value(15, 2))
            z91 = (sheet.cell_value(67, 69))
            z92 = (sheet.cell_value(68, 69))
            z93 = (sheet.cell_value(69, 69))
            z94 = (sheet.cell_value(63, 69))
            z95 = (sheet.cell_value(71,66))
            z96 = (sheet.cell_value(3, 66))
            z97 = (sheet.cell_value(5, 2))
            z98 = (sheet.cell_value(15, 2))
            z99 = (sheet.cell_value(67, 77))
            z100 = (sheet.cell_value(68,77))
            z101= (sheet.cell_value(69, 77))
            z102= (sheet.cell_value(63, 77))
            z103= (sheet.cell_value(71,74))
            z104= (sheet.cell_value(3,74))
            z105= (sheet.cell_value(5, 2))
            z106= (sheet.cell_value(15, 2))
            z107= (sheet.cell_value(67, 81))
            z108= (sheet.cell_value(68, 81))
            z109= (sheet.cell_value(69, 81))
            z110= (sheet.cell_value(63, 81))
            z111= (sheet.cell_value(71,78))
            z112= (sheet.cell_value(3, 78))
            z113= (sheet.cell_value(5, 2))
            z114= (sheet.cell_value(15, 2))
            z115= (sheet.cell_value(67, 85))
            z116= (sheet.cell_value(68, 85))
            z117= (sheet.cell_value(69, 85))
            z118= (sheet.cell_value(63, 85))
            z119= (sheet.cell_value(71, 82))
            z120= (sheet.cell_value(3, 82))
            z121= (sheet.cell_value(5, 2))
            z122= (sheet.cell_value(15, 2))
            z123= (sheet.cell_value(67, 93))
            z124= (sheet.cell_value(68, 93))
            z125= (sheet.cell_value(69, 93))
            z126= (sheet.cell_value(63, 93))
            z127= (sheet.cell_value(71, 90))
            z128= (sheet.cell_value(3, 90))
            z129= (sheet.cell_value(5, 2))
            z130= (sheet.cell_value(15, 2))
            z131= (sheet.cell_value(67, 97))
            z132= (sheet.cell_value(68, 97))
            z133= (sheet.cell_value(69, 97))
            z134= (sheet.cell_value(63, 97))
            z135= (sheet.cell_value(71, 94))
            z136= (sheet.cell_value(3, 94))
            z137= (sheet.cell_value(5, 2))
            z138= (sheet.cell_value(15, 2))
            z139= (sheet.cell_value(67, 101))
            z140= (sheet.cell_value(68, 101))
            z141= (sheet.cell_value(69, 101))
            z142= (sheet.cell_value(63, 101))
            z143= (sheet.cell_value(71, 98))
            z144= (sheet.cell_value(3, 98))
        except IndexError:
            print("2")
        def ww():
            if (sheet.cell_value(5 , 2)) =="Baum":
                return "1"
            if (sheet.cell_value(5, 2)) == "Wald":
                return "2"
            if (sheet.cell_value(5, 2)) == "Strauch":
                return "3"
            if (sheet.cell_value(5, 2)) == "Blüte":
                return "4"
            if (sheet.cell_value(5, 2)) == "Knospe":
                return "5"

    #    c = csv.writer(open("/home/alpha/Schreibtisch/python/21.csv", "w"))
    #    c.writerow(["werk", "wstoff", "klimat","atro", "feuchte", "dicke", "gehalt", "jahr"])
        c = csv.writer(open("/home/alpha/Schreibtisch/python/57.csv", "a"))
     #   c.writerow([sheet.cell_value(5, 2)] + [sheet.cell_value(15, 2)] + [sheet.cell_value(67, 13)]
     #       + [sheet.cell_value(68, 13)] + [sheet.cell_value(69, 13)] + [sheet.cell_value(63, 13)]
     #       + [sheet.cell_value(71,10)] + [sheet.cell_value(3, 5)])
        try:
            c.writerow([ww()] + [z2] + ["%0.3f" % (z3)] +["%0.3f" % (z4)]+["%0.2f" % (z5)]+[ (z6)]+["%.3f" % (z7)] +
                [z8])
        except IndexError and TypeError and UnboundLocalError and ValueError:
            return ""
        try:
            c.writerow([ww()] + [z10] + ["%0.3f" % (z11)] + ["%0.3f" % (z12)] + ["%0.2f" % (z13)] + ["%0.3f" % (z14)] + ["%.3f" % (z15)] +
                [z16])
        except IndexError and TypeError and UnboundLocalError:
            return ""
        try:
            c.writerow([ww()] + [z18] + ["%0.3f" % (z19)] + ["%0.3f" % (z20)] + ["%0.2f" % (z21)] + ["%0.3f" % (z22)] + ["%.3f" % (z23)] +
                [z24])
        except IndexError and TypeError and UnboundLocalError:
            return ""
        try:
            c.writerow([ww()] + [z26] + ["%0.3f" % (z27)] + ["%0.3f" % (z28)] + ["%0.2f" % (z29)] + ["%0.3f" % (z30)] + ["%.3f" % (z31)] +
                [z32])
        except IndexError and TypeError and UnboundLocalError:
            return ""
        try:
            c.writerow([ww()] + [z34] + ["%0.3f" % (z35)] + ["%0.3f" % (z36)] + ["%0.2f" % (z37)] + ["%0.3f" % (z38)] + ["%.3f" % (z39)] +
                [z40])
        except IndexError and TypeError and UnboundLocalError:
            return ""
        try:
            c.writerow([ww()] + [z42] + ["%0.3f" % (z43)] + ["%0.3f" % (z44)] + ["%0.2f" % (z45)] + ["%0.3f" % (z46)] + ["%.3f" % (z47)] +
                [z48])
        except IndexError and TypeError and UnboundLocalError:
            return ""
        try:
            c.writerow([ww()] + [z50] + ["%0.3f" % (z51)] +["%0.3f" % (z52)]+["%0.2f" % (z53)]+["%0.3f" % (z54)]+["%.3f" % (z55)] +
                [z56])
        except IndexError and TypeError and UnboundLocalError:
            return ""
        try:
            c.writerow([ww()] + [z58] + ["%0.3f" % (z59)] + ["%0.3f" % (z60)] + ["%0.2f" % (z61)] + ["%0.3f" % (z62)] + ["%.3f" % (z63)] +
                [z64])
        except IndexError and TypeError and UnboundLocalError:
            return ""
        try:
            c.writerow([ww()] + [z66] + ["%0.3f" % (z67)] + ["%0.3f" % (z68)] + ["%0.2f" % (z69)] + ["%0.3f" % (z70)] + ["%.3f" % (z71)] +
                [z72])
        except IndexError and TypeError and UnboundLocalError:
            return ""
        try:
            c.writerow([ww()] + [z74] + ["%0.3f" % (z75)] + ["%0.3f" % (z76)] + ["%0.2f" % (z77)] + ["%0.3f" % (z78)] + ["%.3f" % (z79)] +
                [z80])
        except IndexError and TypeError and UnboundLocalError:
            return ""
        try:
            c.writerow([ww()] + [z82] + ["%0.3f" % (z83)] + ["%0.3f" % (z84)] + ["%0.2f" % (z85)] + ["%0.3f" % (z86)] + ["%.3f" % (z87)] +
                [z88])
        except IndexError and TypeError and UnboundLocalError:
            return ""
        try:
            c.writerow([ww()] + [z90] + ["%0.3f" % (z91)] + ["%0.3f" % (z92)] + ["%0.2f" % (z93)] + ["%0.3f" % (z94)] + ["%.3f" % (z95)] +
                [z96])
        except IndexError and TypeError and UnboundLocalError:
            return ""
        try:
            c.writerow([ww()] + [z98] + ["%0.3f" % (z99)] + ["%0.3f" % (z100)] + ["%0.2f" % (z101)] + ["%0.3f" % (z102)] + ["%.3f" % (z103)] +
                [z104])
        except IndexError and TypeError and UnboundLocalError:
            return ""
        try:
            c.writerow([ww()] + [z106] + ["%0.3f" % (z107)] + ["%0.3f" % (z108)] + ["%0.2f" % (z109)] + ["%0.3f" % (z110)] + ["%.3f" % (z111)] +
                [z112])
        except IndexError and TypeError and UnboundLocalError:
            return ""
        try:
            c.writerow([ww()] + [z114] + ["%0.3f" % (z115)] +["%0.3f" % (z116)]+["%0.2f" % (z117)]+["%0.3f" % (z118)]+["%.3f" % (z119)] +
                [z120])
        except IndexError and TypeError and UnboundLocalError:
            return ""
        try:
            c.writerow([ww()] + [z122] + ["%0.3f" % (z123)] + ["%0.3f" % (z124)] + ["%0.2f" % (z125)] + ["%0.3f" % (z126)] + ["%.3f" % (z127)] +
                [z128])
        except IndexError and TypeError and UnboundLocalError:
            return ""
        try:
            c.writerow([ww()] + [z130] + ["%0.3f" % (z131)] + ["%0.3f" % (z132)] + ["%0.2f" % (z133)] + ["%0.3f" % (z134)] + ["%.3f" % (z135)] +
                [z136])
        except IndexError and TypeError and UnboundLocalError:
            return ""
        try:
            c.writerow([ww()] + [z138] + ["%0.3f" % (z139)] + ["%0.3f" % (z140)] + ["%0.2f" % (z141)] + ["%0.3f" % (z142)] + ["%.3f" % (z143)] +
                [z144])
        except IndexError and TypeError and UnboundLocalError:
            return ""
            
def anfang():
    c = csv.writer(open("/home/alpha/Schreibtisch/python/57.csv", "w"))
    c.writerow(["werk", "wstoff", "klimat","atro", "feuchte", "dicke", "gehalt", "jahr"])
menu = Menu(root)
root.config(menu=menu)
file = Menu(menu)
file.add_command(label = 'Anfang', command = anfang)
file.add_command(label = 'Öffne', command = OpenFile)
file.add_command(label = 'Exit', command = lambda:exit())
menu.add_cascade(label = 'File', menu = file)
#b = Button(root, text="hee", command=callback)
#b.pack()
print("fertig")
root.mainloop()
Zuletzt geändert von Anonymous am Sonntag 21. August 2016, 14:17, insgesamt 1-mal geändert.
Grund: Quelltext in Python-Codebox-Tags gesetzt.
Sirius3
User
Beiträge: 17741
Registriert: Sonntag 21. Oktober 2012, 17:20

@piniuus: bevor man dir helfen kann, solltest Du das Programm in eine Form bringen, wo man irgendetwas verstehen kann. Zuerst das große Mißverständnis, was Logik betrifft: »and« ist kein Umgangssprachliches »und«, sondern eine logische Verknüpfung mit ganz spezieller Bedeutung in Python. »IndexError and TypeError and UnboundLocalError« ist ein Ausdruck, den Python zu »UnboundLocalError« auswertet, so dass in Deinen »except«-Blöcken nur noch diese Exception abgefangen wird. ABER, »UnboundLocalError« sollte niemals abgefangen werden, weil es sich hierbei eigentlich immer um einen Programmierfehler handelt, den man beheben sollte. Die Fehlerbehandlung an sich (wenn sie denn das tun würde, was Du gedacht hast) ist sowieso nicht sehr sinnvoll und Du solltest sie komplett weglassen.

Bei Funktionen, die mehrere hundert Zeilen lang sind und quasi nur aus durchnummerierten Variablen und Codewiederholungen bestehen, macht man etwas als Programmierer falsch. Lies Deine Daten in sinnvolle Datenstrukturen ein und arbeite mit Listen, die man innerhalb einer for-Schleife ausgeben kann.

Funktionsdefinitionen innerhalb von Funktionen sind selten gut, wobei hier ja »ww« immer das selbe Ergebnis liefert und einfach durch eine Variabel ersetzt werden könnte. Apropos Namen, die sollten dem Leser sagen, für was denn der Name steht, das ist bei »ww« oder »z1« nicht der Fall. Mischen von Anweisungen und Funktionsdefinitionen macht das ganze Programm zusätzlich unübersichtlich.

Bevor Du also irgendwelche weiteren Bedingungen in Dein Programm hineinschreibst, solltest Du erst einmal kräftig Aufräumen und dort wo Dir die Grundlagen fehlen (Listen und Logik) noch mal ein Tutorial durcharbeiten.

Als Ansatz könnte das dienen:

Code: Alles auswählen

import xlrd
import csv
from tkinter as tk
from tkinter import ttk, messagebox
from tkinter.filedialog import askopenfilename

CSV_FILENAME = "/home/alpha/Schreibtisch/python/57.csv"
PLANT2NUM = {
    "Baum": "1",
    "Wald": "2",
    "Strauch": "3",
    "Blüte": "4",
    "Knospe": "5",
}

def append_xls_to_csv(xls_filename):
    workbook = xlrd.open_workbook(xls_filename)
    sheet = workbook.sheet_by_index(0)
    ztest = sheet.cell_value(0, 0)
    if ztest != "krl":
        raise AssertionError("Ungültige Datei ausgewählt!")
    with open(CSV_FILENAME, "a") as output:
        c = csv.writer(output)
        header = [PLANT2NUM[sheet.cell_value(5, 2)], sheet.cell_value(15, 2)]
        for row in [13, 17, 21, 29, 33, 37, 45, 49, 53, 61, 65, 69, 77, 81, 85, 93, 97, 101]:
            c.writerow(header + [
                "%.3f" % sheet.cell_value(67, row),
                "%.3f" % sheet.cell_value(68, row),
                "%.2f" % sheet.cell_value(69, row),
                sheet.cell_value(63, row),
                "%.3f" % sheet.cell_value(71, row-3),
                sheet.cell_value(3, row-3)
            ])

def new_csvfile():
    with open(CSV_FILENAME, "a") as output:
        c = csv.writer(output)
        c.writerow(["werk", "wstoff", "klimat", "atro", "feuchte", "dicke", "gehalt", "jahr"])

def read_excel():
    name = askopenfilename(filetypes =(("Excel File", "*.xls"),("All Files","*.*")),
                           title = "Wähle eine xls Datei.")
    print(name)
    try:
        append_xls_to_csv(name)
    except Exception as exception:
        messagebox.showinfo("ERROR", str(exception))

def main():
    root = tk.Tk()
    root.title( "File Opener")
    label = tk.Label(root, text ="Dateiname angeben", foreground="blue", font=("Helvetica", 12))
    label.pack()
    eingabe = tk.Entry(root)
    eingabe.pack()
    menu = tk.Menu(root)
    root.config(menu=menu)
    file = tk.Menu(menu)
    file.add_command(label='Anfang', command=new_csvfile)
    file.add_command(label='Öffne', command=read_excel)
    file.add_command(label='Exit', command=root.destroy)
    menu.add_cascade(label='File', menu=file)
    root.mainloop()
    
if __name__ == '__main__':
    main()
piniuus
User
Beiträge: 4
Registriert: Freitag 20. Mai 2016, 18:43

Vielen Dank für deine Antwort!

Ich kam leider erst vor ein paar Tagen dazu an dem Programm weiter zu arbeiten.
Habe nun noch ein Modul eingebaut um das Datum in der richtigen Form auszulesen. Da habe ich aber noch das Problem, dass mir auch immer die Uhrzeit mit ausgegen wird, die ich aber nicht benötige.

Habe auch noch das Problem, den Fehler "unorderable types: str()<float(), bei anderen als der Musterdatei zu bekommen.

Code: Alles auswählen


import xlrd
import csv
import tkinter as tk
from tkinter import ttk, messagebox
from tkinter import *
from tkinter.filedialog import askopenfilename
import datetime

CSV_FILENAME = "/home/alpha/Schreibtisch/python/62.csv"
PLANT2NUM = {
    "strauch": "1",
    "baum": "2",
    "ast": "3",
   
}




ausnahme ={
    "cpr" :"1",
    "cpi":"2",
}


def append_xls_to_csv(xls_filename):
    workbook = xlrd.open_workbook(xls_filename)
    sheet = workbook.sheet_by_index(0)
    ztest = sheet.cell_value(0, 0)
    a1 = sheet.cell_value(12, 2)
    a1_as_datetime = str(datetime.datetime(*xlrd.xldate_as_tuple(a1, workbook.datemode)))

    if ztest != "klr":
        raise AssertionError("Ungültige Datei ausgewählt!")
    with open(CSV_FILENAME, "a") as output:
        c = csv.writer(output)
        header = [PLANT2NUM[sheet.cell_value(5, 2)], ausnahme[sheet.cell_value(15, 2)]]
        for row in [13, 17, 21, 29, 33, 37, 45, 49, 53, 61, 65, 69, 77, 81, 85, 93, 97, 101]:
            c.writerow(header + [
                "%3.2f" %sheet.cell_value(67, row),
                "%3.2f" %sheet.cell_value(68, row),
                "%.2f" % sheet.cell_value(69, row),
                "%3.2f" % sheet.cell_value(63, row),
                "%3.2f" % sheet.cell_value(71, row-3),
                sheet.cell_value(12, row-3),a1, a1_as_datetime,

            ])

def new_csvfile():
    with open(CSV_FILENAME, "w") as output:
        c = csv.writer(output)
        c.writerow(["werk", "wstoff", "klimat", "atro", "feuchte", "dicke", "gehalt", "jahr"])

def read_excel():
    name = askopenfilename(initialdir="/home/alpha/Schreibtisch/python",filetypes =(("Excel File", "*.xls"),("All Files","*.*")),
                           title = "Wähle eine xls Datei.")

    print(name)
    try:
        append_xls_to_csv(name)
    #except IndexError or TypeError or UnboundLocalError or ValueError:
     #   return ""
    except Exception as exception:
        messagebox.showinfo("ERROR", str(exception))

def main():


    root = tk.Tk()
    root.title( "File Opener")
    #label = tk.Label(root, text ="Dateiname angeben", foreground="blue", font=("Helvetica", 12))
    #label.pack()
    #eingabe = tk.Entry(root)
    #eingabe.pack()
    menu = tk.Menu(root)
    root.config(menu=menu)
    file = tk.Menu(menu)
    file.add_command(label='Anfang', command=new_csvfile)
    file.add_command(label='Öffne', command=read_excel)
    file.add_command(label='Exit', command=root.destroy)
    menu.add_cascade(label='File', menu=file)
    button1 = tk.Button(root, text='Anfang', width=25, command=new_csvfile)
    button1.pack()
    button2 = tk.Button(root, text='Öffne', width=25, command=read_excel)
    button2.pack()
    button = tk.Button(root, text='Stop', width=25, command=root.destroy)
    button.pack()
    root.mainloop()



if __name__ == '__main__':
    main()


EDIT: das mit dem "unorderable types: str()<float()" lag an einer falschen Zellen Angabe, da die zelle leer war.
Was ich noch gerne fragen würde ist, ob jemand vielleicht einen Tipp hat, wieso ich eine "7" bekomme, wenn in der Zelle ein "DIV/O" stehen habe und wie ich das am besten lösen kann.

Ich bedanke mich schon mal sehr!
Zuletzt geändert von Anonymous am Dienstag 6. September 2016, 20:50, insgesamt 1-mal geändert.
Grund: Quelltext in Python-Codebox-Tags gesetzt.
BlackJack

@piniuus: Den Sternchen-Import aus `tkinter` solltest Du weglassen. Benötigt wird er sowieso nicht.

`file` ist der Name des eingebauten Datentypen für Dateiobjekte, den sollte man nicht an etwas anderes binden. `file_menu` ist für ein Datei-*Menü* sowieso passender.

Namen zu nummerieren ist in der Regel ein Zeichen für unpassende Namen, oder das man eigentlich statt einzelner Namen die Werte in eine Datenstruktur stecken will. Oft ist das eine Liste. Im Falle der Schaltflächen sind die Namen aber auch gänzlich überflüssig, weil damit später nichts mehr gemacht wird.

Die Informationen für das Menü und die Schaltflächen wiederholen sich. Da kann man die Daten in eine Liste heraus ziehen und die Anzeigeelemente in einer Schleife über diese Liste erstellen.

Einbuchstabige Namen sind abseits von einigen Ausnahmen wie Laufindizes oder in sehr beschränkten Gültigkeitsbereichen wie „list/dict comprehensions“, Generatorausdrücken, oder ``lambda``-Ausdrücken keine gute Idee. Ein `csv.writer` sollte nicht `c` heissen.

`a1_as_datetime` ist ein unpassender Name für eine Zeichenkette.

Wenn Du die Uhrzeit ignorieren möchtest, dann erstelle ein `datetime.date`-Objekt, oder lass Dir das vom `datetime.datetime`-Objekt geben, oder Formatiere das Datum selber, nur mit den Komponenten die Du haben möchtest.

Da Du im Quelltext nirgends einen ``<``-Vergleich durchführst, wäre ein kompletter Traceback nützlich. Wahrscheinlich unterdrückst Du den durch Deine Ausnahmebehandlung. Da würde ich am Ende noch ein ``raise`` anfügen, damit die Ausnahme nach dem sie dem Benutzer angezeigt wurde, ihren normalen Lauf nimmt und auch auf der Konsole landet.

Ungetestet:

Code: Alles auswählen

# coding: utf8
import csv
from datetime import datetime as DateTime
import tkinter as tk
from tkinter import messagebox
from tkinter.filedialog import askopenfilename
import xlrd
 

CSV_FILENAME = '/home/alpha/Schreibtisch/python/62.csv'
PLANT2NUM = {
    'strauch': '1',
    'baum': '2',
    'ast': '3', 
}
AUSNAHME = {
    'cpr': '1',
    'cpi': '2',
}


def new_csvfile():
    with open(CSV_FILENAME, 'w') as csv_file:
        csv.writer(csv_file).writerow(
            [
                'werk', 'wstoff', 'klimat', 'atro',
                'feuchte', 'dicke', 'gehalt', 'jahr'
            ]
        )
 
 
def append_xls_to_csv(xls_filename):
    workbook = xlrd.open_workbook(xls_filename)
    sheet = workbook.sheet_by_index(0)

    if sheet.cell_value(0, 0) != 'klr':
        raise ValueError('Ungültige Datei ausgewählt!')

    date_value = sheet.cell_value(12, 2)
    date = DateTime(*xlrd.xldate_as_tuple(date_value, workbook.datemode))
 
    with open(CSV_FILENAME, 'a') as csv_file:
        writer = csv.writer(csv_file)
        header = [
            PLANT2NUM[sheet.cell_value(5, 2)], AUSNAHME[sheet.cell_value(15, 2)]
        ]
        for row in [
            13, 17, 21, 29, 33, 37, 45, 49, 53, 61, 65, 69, 77, 81, 85, 93,
            97, 101,
        ]:
            writer.writerow(
                header + [
                    format(sheet.cell_value(67, row), '3.2f'),
                    format(sheet.cell_value(68, row), '3.2f'),
                    format(sheet.cell_value(69, row), '.2f'),
                    format(sheet.cell_value(63, row), '3.2f'),
                    format(sheet.cell_value(71, row-3), '3.2f'),
                    sheet.cell_value(12, row - 3),
                    date_value,
                    format(date, '%Y-%m-%d'),
                ]
            )

 
def read_excel():
    name = askopenfilename(
        initialdir='/home/alpha/Schreibtisch/python',
        filetypes=(('Excel File', '*.xls'), ('All Files', '*.*')),
        title='Wähle eine xls Datei.',
    )
    print(name)
    if name is not None:
        try:
            append_xls_to_csv(name)
        except Exception as exception:
            messagebox.showinfo('ERROR', str(exception))
            raise


def main():
    root = tk.Tk()
    root.title('Dateiöffner')
    main_menu = tk.Menu(root)
    root.config(menu=main_menu)
    file_menu = tk.Menu(main_menu)
    main_menu.add_cascade(label='Datei', menu=file_menu)

    for text, action in [
        ('Anfang', new_csvfile), ('Öffne', read_excel), ('Ende', root.quit)
    ]:
        file_menu.add_command(label=text, command=action)
        tk.Button(root, text=text, width=25, command=action).pack()
    
    root.mainloop()

 
if __name__ == '__main__':
    main()
Antworten