Excel Datenabgleic

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
FloRasp
User
Beiträge: 7
Registriert: Sonntag 5. November 2023, 11:43

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])
Benutzeravatar
noisefloor
User
Beiträge: 3856
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:

Code: Alles auswählen

main.py wie_auch_immer_die_datei_heißt.xlsx
Gruß, noisefloor
Sirius3
User
Beiträge: 17754
Registriert: Sonntag 21. Oktober 2012, 17:20

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.
FloRasp
User
Beiträge: 7
Registriert: Sonntag 5. November 2023, 11:43

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.
Sirius3
User
Beiträge: 17754
Registriert: Sonntag 21. Oktober 2012, 17:20

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.
__deets__
User
Beiträge: 14545
Registriert: Mittwoch 14. Oktober 2015, 14:29

Irgendwer hat dir das doch vermacht. Den solltest du um Hilfe bitten, das ist ja ein Problem dieses Projektes.
Benutzeravatar
__blackjack__
User
Beiträge: 13117
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.
„All religions are the same: religion is basically guilt, with different holidays.” — Cathy Ladman
FloRasp
User
Beiträge: 7
Registriert: Sonntag 5. November 2023, 11:43

Ich merke schon. Das Projekt muss komplett neu aufgerollt werden.
Benutzeravatar
__blackjack__
User
Beiträge: 13117
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.
„All religions are the same: religion is basically guilt, with different holidays.” — Cathy Ladman
Antworten