Hallo zusammen,
ich habe ein Programm zum Excel-Abgleich bekommen und ich kann die Excel iwie nicht in das Programm hochladen bzw. aufrufen. Bibliotheken sind importiert und die Excel ist im gleichen Ordner wie das Programm.
Kann mir jemand helfen wie ich die Excel importiere?
Als ausgabe erhalte ich:
C:\Users\flori\AppData\Local\Programs\Python\Python311\python.exe C:\Users\flori\Desktop\P3-DATENPOOL-Validation\main.py
Arguments count: 1
Kein DATENPOOL P3 Export Excel-File (.xlsx) angegeben.
Process finished with exit code 1
Code beginnt wie folgt:
import sys
import blacklist as bl
import excelproxy as e
import helper as h
import object_text_parser as p
import tabularlogger as l
import validation as v
datenpoolP3ExcelExport = (".xlsx")
if __name__ == "__main__":
print(f"Arguments count: {len(sys.argv)}")
if len(sys.argv) < 2:
print("Kein DATENPOOL P3 Export Excel-File (.xlsx) angegeben.")
sys.exit(1)
elif len(sys.argv) > 2:
print("Nur ein Argument erwartet: DATENPOOL P3 Export Excel-File (.xlsx) ")
sys.exit(1)
else:
datenpoolP3ExcelExport = str(sys.argv[1])
Excel Datenabgleic
- noisefloor
- User
- Beiträge: 4149
- Registriert: Mittwoch 17. Oktober 2007, 21:40
- Wohnort: WW
- Kontaktdaten:
Hallo,
das Skript erwartet, dass du den Namen der Exceldatei als Argument ans Skript übergibst.
Also:
Gruß, noisefloor
das Skript erwartet, dass du den Namen der Exceldatei als Argument ans Skript übergibst.
Also:
Code: Alles auswählen
main.py wie_auch_immer_die_datei_heißt.xlsx
Zum Parsen von Commandozeilenargumenten sollte man argparse benutzten, das liefert dann gleich schöne Hilfetexte.
Wie Variablennamen sollte man auch keine Module abkürzen, bl für blacklist geht nicht e für excelproxy geht gar nicht und l für tabualarlogger geht gleich dreimal nicht.
Die ganzen Importe werden auch nicht verwendet.
Alles was unter if __name__... steht sollte in eine Funktion wandern, die üblicherweise main genannt wird.
Variablennamen schreibt man komplett klein, Konstanten GROSS. Die erste Zuweisung an datenpoolP3ExcelExport hat zu viele klammern, und wenn das ein Dateiname sein soll, dann ist der Wert auch falsch. Im Programm steht das ja als Defaultwert, es wird aber trotzdem erwartet, dass man einen anderen Wert per Commandozeile angibt, also ist der Defaultwert quatsch und kann weg.
sys.argv[1] ist bereits ein String, den nochmal mit str umzuwandlen ist Unsinn.
Wie Variablennamen sollte man auch keine Module abkürzen, bl für blacklist geht nicht e für excelproxy geht gar nicht und l für tabualarlogger geht gleich dreimal nicht.
Die ganzen Importe werden auch nicht verwendet.
Alles was unter if __name__... steht sollte in eine Funktion wandern, die üblicherweise main genannt wird.
Variablennamen schreibt man komplett klein, Konstanten GROSS. Die erste Zuweisung an datenpoolP3ExcelExport hat zu viele klammern, und wenn das ein Dateiname sein soll, dann ist der Wert auch falsch. Im Programm steht das ja als Defaultwert, es wird aber trotzdem erwartet, dass man einen anderen Wert per Commandozeile angibt, also ist der Defaultwert quatsch und kann weg.
sys.argv[1] ist bereits ein String, den nochmal mit str umzuwandlen ist Unsinn.
Danke für die Antwortt
:
Loading "DATENPOOL.xlsx" ...
Traceback (most recent call last):
File "C:\Users\flori\Desktop\P3-DATENPOOL-Validation\main.py", line 35, in <module>
if (DATENPOOLTable := e.loadDATENPOOLExport(datenpoolP3ExcelExport)) is not None:
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "C:\Users\flori\Desktop\P3-DATENPOOL-Validation\excelproxy.py", line 22, in loadDATENPOOLExport
if not validateColumnTitles(sheet[1]):
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "C:\Users\flori\Desktop\P3-DATENPOOL-Validation\excelproxy.py", line 45, in validateColumnTitles
l.logError("Column " + str(index) + ": Title is \"" + str(cell.value) + "\" but should be \"" + td.attributes[index] + "\"")
TypeError: logError() missing 2 required positional arguments: 'line' and 'signalName'
Er sollte die Excel nach definierten Regeln abgleichen und das Ergebnis dann in das .txt-sheet schreiben. Das hat auch schon funktioniert aber nur bei mir nicht.

Loading "DATENPOOL.xlsx" ...
Traceback (most recent call last):
File "C:\Users\flori\Desktop\P3-DATENPOOL-Validation\main.py", line 35, in <module>
if (DATENPOOLTable := e.loadDATENPOOLExport(datenpoolP3ExcelExport)) is not None:
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "C:\Users\flori\Desktop\P3-DATENPOOL-Validation\excelproxy.py", line 22, in loadDATENPOOLExport
if not validateColumnTitles(sheet[1]):
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "C:\Users\flori\Desktop\P3-DATENPOOL-Validation\excelproxy.py", line 45, in validateColumnTitles
l.logError("Column " + str(index) + ": Title is \"" + str(cell.value) + "\" but should be \"" + td.attributes[index] + "\"")
TypeError: logError() missing 2 required positional arguments: 'line' and 'signalName'
Er sollte die Excel nach definierten Regeln abgleichen und das Ergebnis dann in das .txt-sheet schreiben. Das hat auch schon funktioniert aber nur bei mir nicht.
Der Fehler deutet darauf hin, dass das ganze Programm ziemlich kaputt ist.
Auch wie hier Stringszusammengestückelt werden und dass := benutzt wird, deutet nicht gerade darauf hin, dass das Programm von akzeptabler Qualität wäre.
Auch wie hier Stringszusammengestückelt werden und dass := benutzt wird, deutet nicht gerade darauf hin, dass das Programm von akzeptabler Qualität wäre.
- __blackjack__
- User
- Beiträge: 13919
- Registriert: Samstag 2. Juni 2018, 10:21
- Wohnort: 127.0.0.1
- Kontaktdaten:
Das scheint nicht von einem Python-Programmierer zu sein wenn da dauernd \" innerhalb von Zeichenketten verwendet werden, wo man einfach ' zum einschliessen der Gesamtzeichenkette hätte nehmen können.
Beim ersten Schnipsel wo die ganzen Modulnamen mit einem Buchstaben abgekürzt werden, kann man eigentlich schon sagen das ist für die Tonne. Oder ``str(sys.argv[1])`` — yeah, wir wandeln eine Zeichenkette in eine Zeichenkette um, damit sie noch zeichenkettiger ist.
Beim ersten Schnipsel wo die ganzen Modulnamen mit einem Buchstaben abgekürzt werden, kann man eigentlich schon sagen das ist für die Tonne. Oder ``str(sys.argv[1])`` — yeah, wir wandeln eine Zeichenkette in eine Zeichenkette um, damit sie noch zeichenkettiger ist.
“Java is a DSL to transform big Xml documents into long exception stack traces.”
— Scott Bellware
— Scott Bellware
- __blackjack__
- User
- Beiträge: 13919
- Registriert: Samstag 2. Juni 2018, 10:21
- Wohnort: 127.0.0.1
- Kontaktdaten:
Es ist auch schwierig bei dem Fehler etwas zu sagen weil wir nicht wissen was `l` in `excelproxy` ist. Falls es da auch `tabularlogger` wie im Hauptmodul ist: Was ist `tabularlogger`? Im Package-Index findet man unter dem Namen nichts, und wenn es ein Modul ist was zu diesem Projekt gehört, dann kennen wir das ja nicht. Dann ist das wahrscheinlich ein Fehler der beim Testen bisher nicht aufgefallen ist.
Die Namensschreibweise entsprechen auch nicht den Python-Konventionen. Wie gesagt, das sieht aus als wenn das nicht von einem Python-Programmierer ist.
Die Namensschreibweise entsprechen auch nicht den Python-Konventionen. Wie gesagt, das sieht aus als wenn das nicht von einem Python-Programmierer ist.
“Java is a DSL to transform big Xml documents into long exception stack traces.”
— Scott Bellware
— Scott Bellware